Skip to content

Cookbook

Common patterns and recipes for Wyn.

Read a File Line by Line

wyn
var content = File.read("data.txt")
for line in content.lines() {
    println(line)
}

Parse JSON

wyn
var data = "{\"name\": \"Alice\", \"age\": 25}".parse_json()
println(data.get_string("name"))    // Alice
println("${data.get_int("age")}")  // 25

HTTP Server with JSON API

wyn
var server = Http.listen(3000)
while true {
    var req = Http.accept(server)
    var path = req.split("|")[1]

    if path == "/api/hello" {
        Http.respond(req, 200, Json.stringify({"message": "hello"}))
    } else {
        Http.respond(req, 404, "{\"error\": \"not found\"}")
    }
}

Concurrent Map

wyn
fn process(item: string) -> string {
    return item.upper()
}

var items = ["hello", "world", "wyn"]
var futures = []
for item in items {
    futures.push(spawn process(item))
}

var results = []
for f in futures {
    results.push(await f)
}
// results: ["HELLO", "WORLD", "WYN"]

CSV Processing

wyn
var csv = Csv.parse(File.read("data.csv"))
for i in 1..Csv.row_count(csv) {
    var name = Csv.get_field(csv, i, "name")
    var age = Csv.get_field(csv, i, "age")
    println(name + " is " + age + " years old")
}

String Manipulation

wyn
var s = "  Hello, World!  "
println(s.trim())                    // "Hello, World!"
println(s.trim().upper())           // "HELLO, WORLD!"
println(s.trim().replace("World", "Wyn"))  // "Hello, Wyn!"
println(s.trim().split(", ").join(" | "))  // "Hello | World!"

HashMap

wyn
var m = HashMap.new()
HashMap.set(m, "name", "Alice")
HashMap.set(m, "city", "NYC")
println(HashMap.get(m, "name"))     // Alice
println("${HashMap.len(m)}") // 2

Logging

wyn
Log.set_level(1)  // INFO and above
Log.info("starting")
Log.debug("hidden")  // suppressed
Log.warn("careful")
Log.error("failed")

Base64

wyn
var encoded = Base64.encode("secret data")
println(encoded)                         // c2VjcmV0IGRhdGE=
println(Base64.decode(encoded))          // secret data

Command-Line Arguments

wyn
var name = Args.get("name")
var verbose = Args.has("v")
if name != "" {
    println("Hello, " + name)
}

Benchmarking

wyn
fn fib(n: int) -> int {
    if n <= 1 { return n }
    return fib(n - 1) + fib(n - 2)
}

// Run with: wyn bench fib.wyn --iterations 10
fib(35)

MIT License