Change-Id: Iab7e00cc26a4f9727d3ab98691ef379921a33052 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5240 Tested-by: BuildkiteCI Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: grfn <grfn@gws.fyi> Reviewed-by: tazjin <tazjin@tvl.su>
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
extern crate arglib_netencode;
 | 
						|
extern crate mustache;
 | 
						|
extern crate netencode;
 | 
						|
 | 
						|
use mustache::Data;
 | 
						|
use netencode::T;
 | 
						|
use std::collections::HashMap;
 | 
						|
use std::io::Read;
 | 
						|
use std::os::unix::ffi::OsStrExt;
 | 
						|
 | 
						|
fn netencode_to_mustache_data_dwim(t: T) -> Data {
 | 
						|
    match t {
 | 
						|
        // TODO: good idea?
 | 
						|
        T::Unit => Data::Null,
 | 
						|
        T::N1(b) => Data::Bool(b),
 | 
						|
        T::N3(u) => Data::String(u.to_string()),
 | 
						|
        T::N6(u) => Data::String(u.to_string()),
 | 
						|
        T::N7(u) => Data::String(u.to_string()),
 | 
						|
        T::I3(i) => Data::String(i.to_string()),
 | 
						|
        T::I6(i) => Data::String(i.to_string()),
 | 
						|
        T::I7(i) => Data::String(i.to_string()),
 | 
						|
        T::Text(s) => Data::String(s),
 | 
						|
        T::Binary(b) => unimplemented!(),
 | 
						|
        T::Sum(tag) => unimplemented!(),
 | 
						|
        T::Record(xs) => Data::Map(
 | 
						|
            xs.into_iter()
 | 
						|
                .map(|(key, val)| (key, netencode_to_mustache_data_dwim(val)))
 | 
						|
                .collect::<HashMap<_, _>>(),
 | 
						|
        ),
 | 
						|
        T::List(xs) => Data::Vec(
 | 
						|
            xs.into_iter()
 | 
						|
                .map(|x| netencode_to_mustache_data_dwim(x))
 | 
						|
                .collect::<Vec<_>>(),
 | 
						|
        ),
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
pub fn from_stdin() -> () {
 | 
						|
    let data = netencode_to_mustache_data_dwim(arglib_netencode::arglib_netencode(
 | 
						|
        "netencode-mustache",
 | 
						|
        Some(std::ffi::OsStr::new("TEMPLATE_DATA")),
 | 
						|
    ));
 | 
						|
    let mut stdin = String::new();
 | 
						|
    std::io::stdin().read_to_string(&mut stdin).unwrap();
 | 
						|
    mustache::compile_str(&stdin)
 | 
						|
        .and_then(|templ| templ.render_data(&mut std::io::stdout(), &data))
 | 
						|
        .unwrap()
 | 
						|
}
 | 
						|
 | 
						|
pub fn main() {
 | 
						|
    from_stdin()
 | 
						|
}
 |