Skip to content

Commit 42797cc

Browse files
F# adjustments.
1 parent 0006726 commit 42797cc

File tree

1 file changed

+41
-36
lines changed

1 file changed

+41
-36
lines changed

TelnetNegotiationCore.Functional/MSDPLibrary.fs

+41-36
Original file line numberDiff line numberDiff line change
@@ -15,41 +15,46 @@ module MSDPLibrary =
1515
| MSDP_ARRAY_CLOSE = 6uy
1616

1717
let emptyMap: Map<string, obj> = Map<string, obj> []
18-
19-
let MSDPVal: byte = byte Trigger.MSDP_VAL
18+
19+
let MSDP_VAL: byte = byte Trigger.MSDP_VAL
20+
21+
let MSDP_VAR: byte = byte Trigger.MSDP_VAR
22+
23+
let MSDP_ARRAY_OPEN: byte = byte Trigger.MSDP_ARRAY_OPEN
24+
25+
let MSDP_ARRAY_CLOSE: byte = byte Trigger.MSDP_ARRAY_CLOSE
26+
27+
let MSDP_TABLE_OPEN: byte = byte Trigger.MSDP_TABLE_OPEN
28+
29+
let MSDP_TABLE_CLOSE: byte = byte Trigger.MSDP_TABLE_CLOSE
2030

2131
[<TailCall>]
2232
let rec private MSDPScanTailRec (root: obj, array: byte seq, encoding: Encoding) =
2333
let rec scanRec accRoot accArray =
24-
if Seq.length accArray = 0 then
25-
(accRoot, accArray)
26-
else
27-
match accArray |> Seq.head with
28-
| 1uy ->
29-
let key =
30-
encoding.GetString(
31-
accArray |> Seq.skip 1 |> Seq.takeWhile (fun x -> x <> MSDPVal) |> Array.ofSeq
32-
)
33-
34-
let cv, rest =
35-
scanRec root (accArray |> Seq.skip 1 |> Seq.skipWhile (fun x -> x <> MSDPVal))
36-
37-
scanRec ((accRoot :?> Map<string, obj>).Add(key, cv)) rest
38-
| 2uy ->
39-
match accRoot with
40-
| :? Map<string, obj> -> scanRec emptyMap (accArray |> Seq.skip 1)
41-
| :? List<obj> ->
42-
let cv, rest = scanRec emptyMap (accArray |> Seq.skip 1)
43-
44-
scanRec ((accRoot :?> List<obj>) @ [ cv ]) rest
45-
| _ -> scanRec accRoot (accArray |> Seq.skip 1)
46-
| 3uy -> scanRec emptyMap (accArray |> Seq.skip 1)
47-
| 4uy -> accRoot, accArray |> Seq.skip 1
48-
| 5uy -> scanRec [] (accArray |> Seq.skip 1)
49-
| 6uy -> accRoot, accArray |> Seq.skip 1
50-
| _ ->
51-
encoding.GetString(accArray |> Seq.takeWhile (fun x -> x > 6uy) |> Array.ofSeq),
52-
accArray |> Seq.skipWhile (fun x -> x > 6uy)
34+
match accArray |> Seq.tryHead with
35+
| None -> accRoot, accArray
36+
| Some(1uy) ->
37+
let key =
38+
encoding.GetString(accArray |> Seq.skip 1 |> Seq.takeWhile (fun x -> x <> MSDP_VAL) |> Array.ofSeq)
39+
40+
let cv, rest =
41+
scanRec root (accArray |> Seq.skip 1 |> Seq.skipWhile (fun x -> x <> MSDP_VAL))
42+
43+
scanRec ((accRoot :?> Map<string, obj>).Add(key, cv)) rest
44+
| Some(2uy) ->
45+
match accRoot with
46+
| :? Map<string, obj> -> scanRec emptyMap (accArray |> Seq.skip 1)
47+
| :? List<obj> as accRootList ->
48+
let cv, rest = scanRec emptyMap (accArray |> Seq.skip 1)
49+
scanRec (accRootList @ [ cv ]) rest
50+
| _ -> scanRec accRoot (accArray |> Seq.skip 1)
51+
| Some(3uy) -> scanRec emptyMap (accArray |> Seq.skip 1)
52+
| Some(4uy) -> accRoot, accArray |> Seq.skip 1
53+
| Some(5uy) -> scanRec [] (accArray |> Seq.skip 1)
54+
| Some(6uy) -> accRoot, accArray |> Seq.skip 1
55+
| _ ->
56+
encoding.GetString(accArray |> Seq.takeWhile (fun x -> x > 6uy) |> Array.ofSeq),
57+
accArray |> Seq.skipWhile (fun x -> x > 6uy)
5358

5459
scanRec root array
5560

@@ -64,21 +69,21 @@ module MSDPLibrary =
6469
let parsedObj =
6570
jsonNode.AsObject()
6671
|> Seq.map (fun prop ->
67-
[ byte Trigger.MSDP_VAR ]
72+
[ MSDP_VAR ]
6873
@ (encoding.GetBytes(prop.Key) |> List.ofArray)
69-
@ [ byte Trigger.MSDP_VAL ]
74+
@ [ MSDP_VAL ]
7075
@ parseJsonValue prop.Value)
7176
|> List.concat
7277

73-
[ byte Trigger.MSDP_TABLE_OPEN ] @ parsedObj @ [ byte Trigger.MSDP_TABLE_CLOSE ]
78+
[ MSDP_TABLE_OPEN ] @ parsedObj @ [ MSDP_TABLE_CLOSE ]
7479
| JsonValueKind.Array ->
7580
let parsedArr =
7681
jsonNode.AsArray()
77-
|> Seq.map (fun prop -> [ byte Trigger.MSDP_VAL ] @ parseJsonValue prop)
82+
|> Seq.map (fun prop -> [ MSDP_VAL ] @ parseJsonValue prop)
7883
|> List.ofSeq
7984
|> List.concat
8085

81-
[ byte Trigger.MSDP_ARRAY_OPEN ] @ parsedArr @ [ byte Trigger.MSDP_ARRAY_CLOSE ]
86+
[ MSDP_ARRAY_OPEN ] @ parsedArr @ [ MSDP_ARRAY_CLOSE ]
8287
| JsonValueKind.String -> encoding.GetBytes(jsonNode.AsValue().ToString()) |> List.ofArray
8388
| JsonValueKind.Number -> encoding.GetBytes(jsonNode.AsValue().ToString()) |> List.ofArray
8489
| JsonValueKind.True -> encoding.GetBytes("1") |> List.ofArray

0 commit comments

Comments
 (0)