Change-Id: Ic2bd4e8291b30ceac9fa0e88a4f56e61ae99b603 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10227 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
pub use tvix_eval::{Builtin, Value};
 | 
						|
use tvix_eval_builtin_macros::builtins;
 | 
						|
 | 
						|
#[builtins]
 | 
						|
mod builtins {
 | 
						|
    use tvix_eval::generators::{Gen, GenCo};
 | 
						|
    use tvix_eval::{ErrorKind, Value};
 | 
						|
 | 
						|
    /// Test docstring.
 | 
						|
    ///
 | 
						|
    /// It has multiple lines!
 | 
						|
    #[builtin("identity")]
 | 
						|
    pub async fn builtin_identity(co: GenCo, x: Value) -> Result<Value, ErrorKind> {
 | 
						|
        Ok(x)
 | 
						|
    }
 | 
						|
 | 
						|
    #[builtin("tryEval")]
 | 
						|
    pub async fn builtin_try_eval(_co: GenCo, #[lazy] _x: Value) -> Result<Value, ErrorKind> {
 | 
						|
        unimplemented!("builtin is never called")
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn builtins() {
 | 
						|
    let builtins = builtins::builtins();
 | 
						|
    assert_eq!(builtins.len(), 2);
 | 
						|
 | 
						|
    let (_, identity) = builtins
 | 
						|
        .iter()
 | 
						|
        .find(|(name, _)| *name == "identity")
 | 
						|
        .unwrap();
 | 
						|
 | 
						|
    match identity {
 | 
						|
        Value::Builtin(identity) => assert_eq!(
 | 
						|
            identity.documentation(),
 | 
						|
            Some(
 | 
						|
                r#" Test docstring.
 | 
						|
 | 
						|
 It has multiple lines!"#
 | 
						|
            )
 | 
						|
        ),
 | 
						|
 | 
						|
        _ => panic!("builtin was not a builtin"),
 | 
						|
    }
 | 
						|
}
 |