Skip to content

Instantly share code, notes, and snippets.

@MarkRBM
Last active May 11, 2018 23:32
Show Gist options
  • Save MarkRBM/bfe3c7f4c28bd2ea91cbe9a3346c5755 to your computer and use it in GitHub Desktop.
Save MarkRBM/bfe3c7f4c28bd2ea91cbe9a3346c5755 to your computer and use it in GitHub Desktop.
FunctionalSensors
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
}
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