Skip to content

Commit 876668f

Browse files
committed
refactor(xml): remove Xml.serialize extern
1 parent 30fb7a1 commit 876668f

7 files changed

Lines changed: 7 additions & 38 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ All notable changes to FScript are documented in this file.
44

55
## [Unreleased]
66

7+
- Removed `Xml.serialize` from runtime externs; `Xml.deserialize` remains available.
78
- Made `String.replace`, `String.indexOf`, `String.substring`, and `String.split` consistently pipeline-friendly by using data-last argument order.
89

910
## [0.55.0]

docs/specs/external-functions.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,11 @@ Higher-order externs are implemented in runtime extern modules and receive an `E
9595
- `Json.deserialize : type -> string -> 'a option`
9696
- `Json.serialize : 'a -> string option`
9797
- `Xml.deserialize : type -> string -> string -> 'a list option`
98-
- `Xml.serialize : 'a -> string option`
9998

10099
## Error and option behavior
101100
- Type/arity mismatch in extern calls raises eval errors.
102101
- Many data/IO externs return `None` on operational failures (parse/IO/regex failures), rather than throwing.
103-
- `Xml.deserialize` and `Xml.serialize` do not support XML namespaces.
102+
- `Xml.deserialize` does not support XML namespaces.
104103

105104
## Extending with new externs
106105
Recommended steps:

src/FScript.Runtime/Registry.fs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,4 @@ module Registry =
2121
PrintExterns.print
2222
JsonExterns.deserialize
2323
JsonExterns.serialize
24-
XmlExterns.deserialize
25-
XmlExterns.serialize ]
24+
XmlExterns.deserialize ]

src/FScript.Runtime/XmlExterns.fs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,3 @@ module XmlExterns =
3737
|> Option.defaultValue HostCommon.none
3838
with _ -> HostCommon.none
3939
| _ -> raise (HostCommon.evalError "Xml.deserialize expects (type, xml, query)") }
40-
41-
let serialize : ExternalFunction =
42-
{ Name = "Xml.serialize"
43-
Scheme = Forall([ 0 ], TFun(TVar 0, TOption TString))
44-
Arity = 1
45-
Impl = fun _ -> function
46-
| [ value ] ->
47-
match HostEncode.encodeXml value with
48-
| Some encoded -> HostCommon.some (VString encoded)
49-
| None -> HostCommon.none
50-
| _ -> raise (HostCommon.evalError "Xml.serialize expects (value)") }

tests/FScript.Language.Tests/HostExternTests.fs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -348,14 +348,11 @@ type HostExternTests () =
348348
| _ -> Assert.Fail("Expected Some serialized json")
349349

350350
[<Test>]
351-
member _.``Xml deserialize and serialize work with record payloads`` () =
351+
member _.``Xml deserialize works with record payloads`` () =
352352
let script =
353353
"type Item = { Name: string }\n" +
354-
"type Payload = { Item: Item }\n" +
355-
"let payload = Xml.serialize { Item = { Name = \"x\" } }\n" +
356-
"match payload with\n" +
357-
"| Some xml -> Xml.deserialize (typeof Item) xml \"Item\"\n" +
358-
"| None -> None"
354+
"let xml = \"<root><Item><Name>x</Name></Item></root>\"\n" +
355+
"Xml.deserialize (typeof Item) xml \"Item\""
359356

360357
match Helpers.evalWithExterns externs script with
361358
| VOption (Some (VList [ VRecord fields ])) ->

tests/FScript.Runtime.Tests/RegistryTests.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ type RegistryTests () =
3131
names.Contains "Json.deserialize" |> should equal true
3232
names.Contains "Json.serialize" |> should equal true
3333
names.Contains "Xml.deserialize" |> should equal true
34-
names.Contains "Xml.serialize" |> should equal true
34+
names.Contains "Xml.serialize" |> should equal false

tests/FScript.Runtime.Tests/XmlExternsTests.fs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,3 @@ type XmlExternsTests () =
1313
match invoke XmlExterns.deserialize [ VTypeToken TInt; VString xml; VString "items/item" ] with
1414
| VOption (Some (VList [ VInt 1L; VInt 2L ])) -> ()
1515
| _ -> Assert.Fail("Expected two ints")
16-
17-
[<Test>]
18-
member _.``xml_serialize encodes record values`` () =
19-
let value = VRecord (Map.ofList [ "Name", VString "pkg"; "Enabled", VBool true ])
20-
match invoke XmlExterns.serialize [ value ] with
21-
| VOption (Some (VString xml)) ->
22-
Assert.That(xml, Does.Contain("<root>"))
23-
Assert.That(xml, Does.Contain("<Name>pkg</Name>"))
24-
Assert.That(xml, Does.Contain("<Enabled>true</Enabled>"))
25-
| _ -> Assert.Fail("Expected serialized XML")
26-
27-
[<Test>]
28-
member _.``xml_serialize returns None for non-record top-level`` () =
29-
match invoke XmlExterns.serialize [ VList [ VInt 1L; VInt 2L ] ] with
30-
| VOption None -> ()
31-
| _ -> Assert.Fail("Expected None")

0 commit comments

Comments
 (0)