Mercurial > repos > icfp2013
view src/requests.tp @ 24:e1109e33b796
some work that probably needs to be trashed on requests.tp
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 10 Aug 2013 11:53:21 -0700 |
parents | fcd7ae66a9ee |
children | bb80f86c5048 |
line wrap: on
line source
#{ strJoin <- :str arr { acc <- "" arr foreach: :i el { if: i = 0 { acc <- (string: el) } else: { acc <- acc . ", " . (string: el) } } acc //arr fold: "" with: :acc el {acc . el} } quote <- :str { "\"" . str . "\"" } println <- :str { print: str . "\n" } evalRequest <- :id args { #{ string <- { idStr <- (quote: "id") . ":" . (quote: id) argsStr <- (quote: "arguments") . ":" . (quote: (strJoin: "," args)) "{" . idStr . "," . argsStr . "}" } } } guessRequest <- :id :prog { #{ string <- { idStr <- "\"id\":\"" . id . "\"" progStr <- "\"program\":\"" . prog . "\"" "{" . idStr . "," . progStr . "}" } } } expect:in:else <- :target src doElse { src find: target else: { print: "parse error: expected " . target . "!\n" doElse: } } getStrForKey:from:else <- :key :src :doElse { firstKeyQuote <- expect: "\"" in: src else: doElse secondQuote <- firstKeyQuote + 1 + (key length) #{ value <- "" rest <- src from: (value length) } } getOutputs:else <- :str :fail { } getEval:else <- :str :fail { statusRest <- getStrForKey: "status" from: str else: fail if: (statusRest value) = "ok" { // string equality? revisit. outputsRest <- getOutputs: (statusRest rest) else: fail #{ value <- #{ status <- statusRest value outputs <- outputsRest value } rest <- outputsRest rest } } else: { message <- "" print: "Status was error, message: " . message messageRest <- getStrForKey: "message" from: (statusRest rest) else: fail #{ value <- #{ status <- statusRest value message <- messageRest value } rest <- messageRest rest } } } main <- { print: ((evalRequest: "someId" #[1 2i64 3i64]) string) . "\n" print: ((guessRequest: "someId" "someProg") string) . "\n" exampleEvalResponse <- "{\"status\":\"ok\",\"outputs\":[\"0x0000000000000002\",\"0x01DFFFFFFFFFFFFE\"]}" resp <- getEval: exampleEvalResponse else: { println: "failed to parse response." } println: ((resp value) status) } }