26 lines
588 B
Gleam
26 lines
588 B
Gleam
import gleam/dynamic/decode
|
|
import gleam/float
|
|
import gleam/json
|
|
import gleam/string
|
|
|
|
pub fn parse_playback_time(
|
|
json_string: String,
|
|
) -> Result(Float, json.DecodeError) {
|
|
let decoder = {
|
|
let float_dececoder = fn(data_string) {
|
|
case float.parse(data_string) {
|
|
Error(_) -> decode.failure(0.0, "data")
|
|
Ok(float_value) -> decode.success(float_value)
|
|
}
|
|
}
|
|
use data <- decode.field(
|
|
"data",
|
|
decode.then(decode.string, float_dececoder),
|
|
)
|
|
|
|
decode.success(data)
|
|
}
|
|
|
|
json.parse(from: string.trim(json_string), using: decoder)
|
|
}
|