feat(tvix/eval): implement Value::coerce_to_path()
This function is necessary for all builtins that expect some form of path as an argument. It is merely a wrapper around coerce_to_string that can shortcut if we already have a path. The absolute path check is done in the same way as in C++ Nix for compatibility, although it should probably be revised in the long term (think about Windows, for example). Since coercing to a path is not an operation possible in the language directly, this function can live in the builtins module as the only place it is required. Change-Id: I69ed5455c00d193fea88b8fa83e28907a761cab5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6574 Autosubmit: sterni <sternenseemann@systemli.org> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									e834a2cbc4
								
							
						
					
					
						commit
						067f2b16f6
					
				
					 4 changed files with 48 additions and 1 deletions
				
			
		|  | @ -2,7 +2,7 @@ | |||
| //! backing implementations.
 | ||||
| use smol_str::SmolStr; | ||||
| use std::hash::Hash; | ||||
| use std::{borrow::Cow, fmt::Display}; | ||||
| use std::{borrow::Cow, fmt::Display, str::Chars}; | ||||
| 
 | ||||
| #[derive(Clone, Debug)] | ||||
| enum StringRepr { | ||||
|  | @ -97,6 +97,13 @@ impl NixString { | |||
|         s.push_str(other.as_str()); | ||||
|         NixString(StringRepr::Heap(s)) | ||||
|     } | ||||
| 
 | ||||
|     pub fn chars(&self) -> Chars<'_> { | ||||
|         match &self.0 { | ||||
|             StringRepr::Heap(h) => h.chars(), | ||||
|             StringRepr::Smol(s) => s.chars(), | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn nix_escape_char(ch: char, next: Option<&char>) -> Option<&'static str> { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue