feat(tvix/eval): implement builtins.partition
Change-Id: I8b591f3057c68c1542046fc5a771973f2238c9df Reviewed-on: https://cl.tvl.fyi/c/depot/+/7020 Autosubmit: j4m3s <james.landrein@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									4dcb8f38c2
								
							
						
					
					
						commit
						5ee2258692
					
				
					 3 changed files with 39 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -446,6 +446,31 @@ fn pure_builtins() -> Vec<Builtin> {
 | 
			
		|||
                ("version".into(), version),
 | 
			
		||||
            ]))))
 | 
			
		||||
        }),
 | 
			
		||||
        Builtin::new(
 | 
			
		||||
            "partition",
 | 
			
		||||
            &[true, true],
 | 
			
		||||
            |args: Vec<Value>, vm: &mut VM| {
 | 
			
		||||
                let mut right: Vec<Value> = vec![];
 | 
			
		||||
                let mut wrong: Vec<Value> = vec![];
 | 
			
		||||
 | 
			
		||||
                let list: NixList = args[1].to_list()?;
 | 
			
		||||
                for elem in list.into_iter() {
 | 
			
		||||
                    let result = vm.call_with(&args[0], [elem.clone()])?;
 | 
			
		||||
 | 
			
		||||
                    if result.force(vm)?.as_bool()? {
 | 
			
		||||
                        right.push(elem);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        wrong.push(elem);
 | 
			
		||||
                    };
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                let mut res: BTreeMap<NixString, Value> = BTreeMap::new();
 | 
			
		||||
                res.insert("right".into(), Value::List(right.into()));
 | 
			
		||||
                res.insert("wrong".into(), Value::List(wrong.into()));
 | 
			
		||||
 | 
			
		||||
                Ok(Value::attrs(NixAttrs::from_map(res)))
 | 
			
		||||
            },
 | 
			
		||||
        ),
 | 
			
		||||
        Builtin::new(
 | 
			
		||||
            "removeAttrs",
 | 
			
		||||
            &[true, true],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue