From 3fb92d4654fbc626570dbc6c5beecfd3c5afd371 Mon Sep 17 00:00:00 2001 From: Alexander Heldt Date: Sun, 16 Nov 2025 15:47:00 +0100 Subject: [PATCH] wip --- src/mpv/control.gleam | 31 ++++-------------------- src/mpv/internal/control.gleam | 44 ++++++++++++++++++---------------- test/mpv/control_test.gleam | 13 ++++++---- 3 files changed, 36 insertions(+), 52 deletions(-) diff --git a/src/mpv/control.gleam b/src/mpv/control.gleam index 7660bdd..ad5b38d 100644 --- a/src/mpv/control.gleam +++ b/src/mpv/control.gleam @@ -1,9 +1,8 @@ -import gleam/dynamic/decode -import gleam/float import gleam/json import gleam/result import gleam/string +import mpv/internal/control as internal_control import mpv/key.{type Key, Char} 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 internal_control.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 4c7bfdc..66cb559 100644 --- a/test/mpv/control_test.gleam +++ b/test/mpv/control_test.gleam @@ -2,6 +2,7 @@ import gleam/list import gleeunit import mpv/control.{type Control} +import mpv/internal/control as control_internal import mpv/key.{type Key, Char} pub fn main() -> Nil { @@ -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 +}