diff --git a/src/mpv/control.gleam b/src/mpv/control.gleam index 9c94f26..3fcadb0 100644 --- a/src/mpv/control.gleam +++ b/src/mpv/control.gleam @@ -1,10 +1,9 @@ -import gleam/dynamic/decode -import gleam/float import gleam/json import gleam/result import gleam/string import mpv/internal.{type Key, Char} +import mpv/internal/control as control_internal import tcp/reason.{type Reason} import tcp/tcp.{type Socket} @@ -58,32 +57,12 @@ pub fn get_playback_time(socket: Socket) -> Result(PlaybackTime, ControlError) { case send_command(socket, command) { Error(r) -> Error(ControlError(reason.to_string(r))) - Ok(json_string) -> parse_playback_time(json_string) - } -} - -fn parse_playback_time( - json_string: String, -) -> Result(PlaybackTime, ControlError) { - 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) + Ok(json_string) -> + case control_internal.parse_playback_time(json_string) { + Error(e) -> Error(ControlError(string.inspect(e))) + Ok(data) -> Ok(PlaybackTime(data)) } - } - use data <- decode.field( - "data", - decode.then(decode.string, float_dececoder), - ) - - decode.success(PlaybackTime(data)) } - - result.map_error( - json.parse(from: string.trim(json_string), using: decoder), - fn(r) { ControlError(string.inspect(r)) }, - ) } fn send_command(socket: Socket, command: json.Json) -> Result(String, Reason) { diff --git a/src/mpv/internal/control.gleam b/src/mpv/internal/control.gleam index d76d4d0..597a695 100644 --- a/src/mpv/internal/control.gleam +++ b/src/mpv/internal/control.gleam @@ -1,23 +1,25 @@ -// fn parse_playback_time( -// json_string: String, -// ) -> Result(PlaybackTime, ControlError) { -// 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), -// ) +import gleam/dynamic/decode +import gleam/float +import gleam/json +import gleam/string -// decode.success(PlaybackTime(data)) -// } +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), + ) -// result.map_error( -// json.parse(from: string.trim(json_string), using: decoder), -// fn(r) { ControlError(string.inspect(r)) }, -// ) -// } + decode.success(data) + } + + json.parse(from: string.trim(json_string), using: decoder) +} diff --git a/test/mpv/control_test.gleam b/test/mpv/control_test.gleam index ef346a9..34dfc13 100644 --- a/test/mpv/control_test.gleam +++ b/test/mpv/control_test.gleam @@ -3,6 +3,7 @@ import gleeunit import mpv/control.{type Control} import mpv/internal.{type Key, Char} +import mpv/internal/control as control_internal pub fn main() -> Nil { gleeunit.main() @@ -22,9 +23,11 @@ pub fn control_from_key_test() { assert tc.expected == control.from_key(tc.key) }) } -// pub fn parse_playback_time_test() { -// let json_string = -// "{\"data\":\"123.456789\",\"request_id\":0,\"error\":\"success\"}\n" -// let assert Ok(_) = control.parse_p -// } +pub fn parse_playback_time_test() { + let json_string = + "{\"data\":\"123.456789\",\"request_id\":0,\"error\":\"success\"}\n" + + let assert Ok(data) = control_internal.parse_playback_time(json_string) + assert data == 123.456789 +}