Closed Rogibb111 closed 1 year ago
Did a small example work through for this in Scastie:
import scala.collection.mutable.ArrayBuffer
final case class ResortData(dailySnow: Int, baseDepth: Int, temperature: Int, windSpeed: Int, windDir: String)
final case class ResortDataSnapshot(timestamp: String, resortData: ResortData)
final case class DataPlot(timestamp: String, value: String | Int)
class GraphData () {
val dailySnow = ArrayBuffer[DataPlot]()
val baseDepth = ArrayBuffer[DataPlot]()
val temperature = ArrayBuffer[DataPlot]()
val windSpeed = ArrayBuffer[DataPlot]()
val windDir = ArrayBuffer[DataPlot]()
def addPlotsFromSnapshot(snapshot: ResortDataSnapshot): Unit = {
dailySnow += new DataPlot(snapshot.timestamp, snapshot.resortData.dailySnow)
baseDepth += new DataPlot(snapshot.timestamp, snapshot.resortData.baseDepth)
temperature += new DataPlot(snapshot.timestamp, snapshot.resortData.temperature)
windSpeed += new DataPlot(snapshot.timestamp, snapshot.resortData.windSpeed)
windDir += new DataPlot(snapshot.timestamp, snapshot.resortData.windDir)
}
}
val data1 = new ResortData(2, 4, 5, 4, "North")
val data2 = new ResortData(1, 3, 4, 3, "South")
val data3 = new ResortData(1, 3, 4, 4, "West")
val dataSnap1 = new ResortDataSnapshot("time1", data1);
val dataSnap2 = new ResortDataSnapshot("time2", data2);
val dataSnap3 = new ResortDataSnapshot("time3", data3);
val dataArr = Array(dataSnap1, dataSnap2, dataSnap3)
dataArr.map(data => println(data))
val graphData = new GraphData()
for
snapshot <- dataArr
do
graphData.addPlotsFromSnapshot(snapshot)
for
data <- graphData.dailySnow
do
println(data)
Above code sample only works for scala3. This should work for scala 2:
import scala.collection.mutable.ArrayBuffer
final case class ResortData(dailySnow: Int, baseDepth: Int, temperature: Int, windSpeed: Int, windDir: String)
final case class ResortDataSnapshot(timestamp: String, resortData: ResortData)
final case class DataPlot(timestamp: String, value: Any)
class GraphData () {
val dailySnow = ArrayBuffer[DataPlot]()
val baseDepth = ArrayBuffer[DataPlot]()
val temperature = ArrayBuffer[DataPlot]()
val windSpeed = ArrayBuffer[DataPlot]()
val windDir = ArrayBuffer[DataPlot]()
def addPlotsFromSnapshot(snapshot: ResortDataSnapshot): Unit = {
dailySnow += new DataPlot(snapshot.timestamp, snapshot.resortData.dailySnow)
baseDepth += new DataPlot(snapshot.timestamp, snapshot.resortData.baseDepth)
temperature += new DataPlot(snapshot.timestamp, snapshot.resortData.temperature)
windSpeed += new DataPlot(snapshot.timestamp, snapshot.resortData.windSpeed)
windDir += new DataPlot(snapshot.timestamp, snapshot.resortData.windDir)
}
}
val data1 = new ResortData(2, 4, 5, 4, "North")
val data2 = new ResortData(1, 3, 4, 3, "South")
val data3 = new ResortData(1, 3, 4, 4, "West")
val dataSnap1 = new ResortDataSnapshot("time1", data1);
val dataSnap2 = new ResortDataSnapshot("time2", data2);
val dataSnap3 = new ResortDataSnapshot("time3", data3);
val dataArr = Array(dataSnap1, dataSnap2, dataSnap3)
dataArr.map(data => println(data))
val graphData = new GraphData()
for (snapshot <- dataArr) {
graphData.addPlotsFromSnapshot(snapshot)
}
for (data <- graphData.dailySnow) {
println(data)
}
Needed a way to generate a JSON list of timestamps and values. Came up with a DataPlot case class that will take in either an Int or a String. Example below turns the class into a Json Object
import play.api.libs.json.JsValue
import scala.collection.mutable.ArrayBuffer;
import play.api.libs.json.Json
import play.api.libs.json.Writes
import play.api.libs.json.JsValue
import play.api.libs.json.JsString
import play.api.libs.json.JsNumber
final case class DataPlot(timestamp: String, value: Either[String, Int]) {
implicit val valWrites = new Writes[Either[String, Int]] {
def writes(o: Either[String,Int]): JsValue = o.fold(
l => JsString(l),
r => JsNumber(r)
)
}
implicit val writes = Json.writes[DataPlot]
def toJson(): String = {
return Json.toJson(this).toString()
}
}
val data = new DataPlot("hey", Left("you"))
print(data.toJson())
:tada: This issue has been resolved in version 1.5.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:
I need to update the way that individual resort data renders so I can effectively use it with the lit-graph library I created. This will mean separating out the different data point types and combing them with dates in the correct JSON array format.