diff --git a/lib/irc/msg.ml b/lib/irc/msg.ml index 37bf4c7..fd029eb 100644 --- a/lib/irc/msg.ml +++ b/lib/irc/msg.ml @@ -30,9 +30,12 @@ type t = { trailing : bool; } [@@deriving show { with_path = false }] +let is_param_trailing p = + String.starts_with p ~prefix:":" || String.contains p ' ' + let rec is_params_trailing = function | [] -> false - | [tr] -> String.contains tr ' ' + | [p] -> is_param_trailing p | _ :: tl -> is_params_trailing tl let make ?(prefix = No_prefix) ?(always_trailing = false) command params = @@ -48,12 +51,12 @@ let write buf t = Buffer.add_string buf t.command; let rec add_params = function | [] -> () - | [tr] when t.trailing -> + | [p] when t.trailing -> Buffer.add_string buf " :"; - Buffer.add_string buf tr - | hd::tl -> + Buffer.add_string buf p + | p::tl -> Buffer.add_char buf ' '; - Buffer.add_string buf hd; + Buffer.add_string buf p; add_params tl in add_params t.params; @@ -168,6 +171,9 @@ let%expect_test _ = make "NICK" ["tali"] |> print_msg_nl; [%expect {| "NICK tali\r\n" |}]; + make "NICK" [":)"] |> print_msg_nl; + [%expect {| "NICK ::)\r\n" |}]; + make "USER" ["milo"; "0"; "*"; "milo"] ~always_trailing:true |> print_msg_nl; [%expect {| "USER milo 0 * :milo\r\n" |}];