refactor(snix/glue): reduce string allocations in the flake ref parser
Change-Id: Id6818976b651b6d6ffa51cf7e2066cce0cb01055 Reviewed-on: https://cl.snix.dev/c/snix/+/30203 Reviewed-by: Florian Klink <flokli@flokli.de> Autosubmit: Sander Melnikov <hey@sandydoo.me> Tested-by: besadii
This commit is contained in:
		
							parent
							
								
									7aef14c57f
								
							
						
					
					
						commit
						be949fb122
					
				
					 2 changed files with 16 additions and 13 deletions
				
			
		|  | @ -633,6 +633,11 @@ impl NixString { | |||
|         unsafe { NixStringInner::data_slice(self.0) } | ||||
|     } | ||||
| 
 | ||||
|     /// Returns a &str if the NixString is a valid UTF-8 string.
 | ||||
|     pub fn as_str(&self) -> Result<&str, std::str::Utf8Error> { | ||||
|         std::str::from_utf8(self.as_bytes()) | ||||
|     } | ||||
| 
 | ||||
|     pub fn into_bstring(self) -> BString { | ||||
|         self.as_bstr().to_owned() | ||||
|     } | ||||
|  |  | |||
|  | @ -202,20 +202,18 @@ pub(crate) mod fetcher_builtins { | |||
|         co: GenCo, | ||||
|         value: Value, | ||||
|     ) -> Result<Value, ErrorKind> { | ||||
|         let flake_ref_str = value.to_str()?.into_bstring().as_bstr().to_string(); | ||||
|         let flake_ref = value.to_str()?; | ||||
|         let flake_ref_str = flake_ref.to_str()?; | ||||
| 
 | ||||
|         let fetch_args = match flake_ref_str.parse() { | ||||
|             Ok(args) => args, | ||||
|             Err(err) => { | ||||
|                 return Err(ErrorKind::SnixError(Rc::new(err))); | ||||
|             } | ||||
|         }; | ||||
|         let fetch_args = flake_ref_str | ||||
|             .parse() | ||||
|             .map_err(|err| ErrorKind::SnixError(Rc::new(err)))?; | ||||
| 
 | ||||
|         // Convert the FlakeRef to our Value format
 | ||||
|         let mut attrs = BTreeMap::new(); | ||||
| 
 | ||||
|         // Extract type and url based on the variant
 | ||||
|         match &fetch_args { | ||||
|         match fetch_args { | ||||
|             flakeref::FlakeRef::Git { url, .. } => { | ||||
|                 attrs.insert("type".into(), Value::from("git")); | ||||
|                 attrs.insert("url".into(), Value::from(url.to_string())); | ||||
|  | @ -224,16 +222,16 @@ pub(crate) mod fetcher_builtins { | |||
|                 owner, repo, r#ref, .. | ||||
|             } => { | ||||
|                 attrs.insert("type".into(), Value::from("github")); | ||||
|                 attrs.insert("owner".into(), Value::from(owner.clone())); | ||||
|                 attrs.insert("repo".into(), Value::from(repo.clone())); | ||||
|                 attrs.insert("owner".into(), Value::from(owner)); | ||||
|                 attrs.insert("repo".into(), Value::from(repo)); | ||||
|                 if let Some(ref_name) = r#ref { | ||||
|                     attrs.insert("ref".into(), Value::from(ref_name.clone())); | ||||
|                     attrs.insert("ref".into(), Value::from(ref_name)); | ||||
|                 } | ||||
|             } | ||||
|             flakeref::FlakeRef::GitLab { owner, repo, .. } => { | ||||
|                 attrs.insert("type".into(), Value::from("gitlab")); | ||||
|                 attrs.insert("owner".into(), Value::from(owner.clone())); | ||||
|                 attrs.insert("repo".into(), Value::from(repo.clone())); | ||||
|                 attrs.insert("owner".into(), Value::from(owner)); | ||||
|                 attrs.insert("repo".into(), Value::from(repo)); | ||||
|             } | ||||
|             flakeref::FlakeRef::File { url, .. } => { | ||||
|                 attrs.insert("type".into(), Value::from("file")); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue