raster-style 0.1.0

Raster Style Spec v2 JSON and Q2 query codec
Documentation
use raster_style::{decode_query, encode_query, Style};
use serde_json::{json, Value};
use std::io::{self, BufRead};

fn run(request: &Value) -> raster_style::Result<Value> {
    let style = match request["op"].as_str() {
        Some("encode") => Style::from_json(request["json"].as_str().unwrap_or_default())?,
        Some("decode") => decode_query(request["query"].as_str().unwrap_or_default())?,
        _ => return Ok(json!({"error":"E_CONFIG"})),
    };
    Ok(json!({"query":encode_query(&style)?,"json":style.to_json()?}))
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
    for line in io::stdin().lock().lines() {
        let line = line?;
        let result = match serde_json::from_str::<Value>(&line) {
            Ok(request) => run(&request).unwrap_or_else(|error| json!({"error":error.code})),
            Err(_) => json!({"error":"E_JSON"}),
        };
        println!("{result}");
    }
    Ok(())
}