import Std.Internal.Http.Internal.String import Std.Internal.Http.Internal.Char open Std.Http.Internal private def c (n : Nat) : Char := Char.ofNat n #guard Std.Http.Internal.Char.qdtext (c 0x08) = false #guard Std.Http.Internal.Char.qdtext (c 0x09) = true #guard Std.Http.Internal.Char.qdtext (c 0x0a) = false #guard Std.Http.Internal.Char.qdtext (c 0x1f) = false #guard Std.Http.Internal.Char.qdtext (c 0x20) = true #guard Std.Http.Internal.Char.qdtext (c 0x21) = true #guard Std.Http.Internal.Char.qdtext (c 0x22) = false #guard Std.Http.Internal.Char.qdtext (c 0x23) = true #guard Std.Http.Internal.Char.qdtext (c 0x5b) = true #guard Std.Http.Internal.Char.qdtext (c 0x5c) = false #guard Std.Http.Internal.Char.qdtext (c 0x5d) = true #guard Std.Http.Internal.Char.qdtext (c 0x7e) = true #guard Std.Http.Internal.Char.qdtext (c 0x7f) = false #guard Std.Http.Internal.Char.quotedPairChar (c 0x08) = false #guard Std.Http.Internal.Char.quotedPairChar (c 0x09) = true #guard Std.Http.Internal.Char.quotedPairChar (c 0x1f) = false #guard Std.Http.Internal.Char.quotedPairChar (c 0x20) = true #guard Std.Http.Internal.Char.quotedPairChar (c 0x21) = true #guard Std.Http.Internal.Char.quotedPairChar (c 0x22) = true #guard Std.Http.Internal.Char.quotedPairChar (c 0x5c) = true #guard Std.Http.Internal.Char.quotedPairChar (c 0x7e) = true #guard Std.Http.Internal.Char.quotedPairChar (c 0x7f) = false #guard Std.Http.Internal.Char.quotedStringChar (c 0x09) = true #guard Std.Http.Internal.Char.quotedStringChar (c 0x20) = true #guard Std.Http.Internal.Char.quotedStringChar (c 0x22) = true #guard Std.Http.Internal.Char.quotedStringChar (c 0x5c) = true #guard Std.Http.Internal.Char.quotedStringChar (c 0x0a) = false #guard Std.Http.Internal.Char.quotedStringChar (c 0x0d) = false #guard Std.Http.Internal.Char.quotedStringChar (c 0x7f) = false #guard quoteHttpString? "token" = some "token" #guard quoteHttpString? "a\t " = some "\"a\t \"" #guard quoteHttpString? "atabpo\n\t " = none #guard quoteHttpString? "" = some "\"\"" #guard quoteHttpString? "\"" = some "\"\\\"\"" #guard quoteHttpString? "\\" = some "\"\\\\\"" #guard quoteHttpString? "\"\\\"" = some "\"\\\"\\\\\\\"\"" #guard quoteHttpString? "abc\rdef" = none #guard quoteHttpString? "abc\ndef" = none #guard quoteHttpString? "abc\u0000def" = none #guard unquoteHttpString? "\"token\"" = some "token" #guard unquoteHttpString? "\"a\\\\\\\"b\"" = some "a\\\"b" #guard unquoteHttpString? "\"line1\nline2\"" = none #guard unquoteHttpString? "\"\"" = some "" #guard unquoteHttpString? "\"\\\\\"" = some "\\" #guard unquoteHttpString? "\"\\\"\"" = some "\"" #guard unquoteHttpString? "\"a\\tb\"" = some "atb" #guard unquoteHttpString? "\"a\tb\"" = some "a\tb" #guard unquoteHttpString? "token" = some "token" #guard unquoteHttpString? "\"" = none #guard unquoteHttpString? "\"abc" = none #guard unquoteHttpString? "\"abc\\\"" = none #guard unquoteHttpString? "\"abc\\\n\"" = none #guard unquoteHttpString? "\"abc\r\"" = none private def isQuotedString (s : String) : Bool := s.startsWith '"' && (unquoteHttpString? s).isSome #guard isQuotedString "\"abc\"" = true #guard isQuotedString "\"ab\\\\\\\"c\"" = true #guard isQuotedString "\"ab\nc\"" = false #guard isQuotedString "\"\"" = true #guard isQuotedString "\"\\\"\"" = true #guard isQuotedString "\"\\\\\"" = true #guard isQuotedString "abc" = false #guard isQuotedString "\"" = false #guard isQuotedString "\"abc" = false #guard isQuotedString "\"abc\\\"" = false #guard unquoteHttpString? (quoteHttpString! "abc\t ") = some "abc\t " #guard unquoteHttpString? (quoteHttpString! "a\\\"b") = some "a\\\"b" #guard unquoteHttpString? (quoteHttpString! "") = some "" #guard unquoteHttpString? (quoteHttpString! "\"") = some "\"" #guard unquoteHttpString? (quoteHttpString! "\\") = some "\\" #guard unquoteHttpString? (quoteHttpString! " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~") = some " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"