Last active
May 11, 2018 23:32
-
-
Save MarkRBM/bfe3c7f4c28bd2ea91cbe9a3346c5755 to your computer and use it in GitHub Desktop.
FunctionalSensors
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Object Behavior { | |
//assuming I can build a Seq[Vendor] | |
// I ultimately need a function like this | |
//Seq[Vendor] => (Seq[SensorRead[_]], Seq[OpStatus]) | |
// so that I can send the reads and statuses off to somewhere else | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sealed abstract class Configuration | |
final case class VendorOneConf extends Configuration | |
final case class VendorTwoConf extends Configuration | |
sealed abstract class Credentials | |
final case class VendorOneCredentials | |
final case class VendorTwoCredentials | |
// sealed trait VendorClient { | |
// private def getCreds(conf: VendorConfiguration): VendorCredentials | |
// def getLocations(c: VendorCredentials): Seq[Location] | |
// } | |
sealed abstract class Vendor | |
final case class VendorOne(conf: VendorOneConf) | |
final case class VendorTwo(conf: VendorTwoConf) | |
// sealed trait Vendor { | |
// def conf: VendorConfiguration | |
// def client: VendorClient | |
// def locations: Seq[Location] | |
// } | |
final case class Location(devices: Seq[Device]) | |
final case class Device(uuid: String, operationalStatus: OpStatus, sensors: Seq[Sensor[_]]) | |
final case class OpStatus(operational: Boolean, metrics: Seq[OpMetric]) | |
sealed abstract class OpMetric | |
final case class Connected(value: Boolean) extends OpMetric | |
final case class BatteryLevel(value: Int) extends OpMetric | |
final case class LastReport(value: ZonedDateTime) extends OpMetric | |
sealed abstract class SensorType | |
sealed abstract class Occupancy extends SensorType | |
final case class VendorOneOccupancy(reads: Seq[SensorReads[Boolean]]) extends Occupancy | |
final case class VendorTwoOccupancy(reads: Seq[SensorReads[Boolean]]) extends Occupancy | |
sealed abstract class Vibration extends SensorType | |
final case class VendorTwoVibration(reads: Seq[SensorReads[Boolean]]) extends Vibration | |
sealed abstract class PeopleCount extends SensorType | |
final case class VendorOnePeopleCount(reads: Seq[SensorReads[Int]]) extends Vibration | |
final case class SensorRead[A](value: A, readTime: SensorReadTime) | |
sealed abstract class SensorReadTime | |
final case class Instant(time: ZonedDateTime) extends SensorRead | |
final case class Range(from: ZonedDateTime, to: ZonedDateTime) extends SensorRead | |
// sealed abstract class Sensor[A, B <: SensortType[A]] extends B |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment