feat(snix/castore/PathComponent): add extension() method
This returns the file extension. Change-Id: I488cbadbce027a37d53cee808bcf7a95283ed07d Reviewed-on: https://cl.snix.dev/c/snix/+/30319 Tested-by: besadii Reviewed-by: Domen Kožar <domen@cachix.org> Reviewed-by: Stefan Junker <mail@stefanjunker.de>
This commit is contained in:
		
							parent
							
								
									6b48bcc1bf
								
							
						
					
					
						commit
						8c525dcc2d
					
				
					 1 changed files with 21 additions and 0 deletions
				
			
		|  | @ -12,6 +12,18 @@ pub struct PathComponent { | |||
|     pub(super) inner: bytes::Bytes, | ||||
| } | ||||
| 
 | ||||
| impl PathComponent { | ||||
|     /// Extracts the extension (without leading dot) of a [PathComponent], if possible.
 | ||||
|     pub fn extension(&self) -> Option<&[u8]> { | ||||
|         let mut iter = self.inner[..].rsplitn(2, |b| *b == b'.'); | ||||
|         let e = iter.next(); | ||||
|         // Return None if there's no dot.
 | ||||
|         iter.next()?; | ||||
| 
 | ||||
|         e | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /// The maximum length an individual path component can have.
 | ||||
| /// Linux allows 255 bytes of actual name, so we pick that.
 | ||||
| pub const MAX_NAME_LEN: usize = 255; | ||||
|  | @ -212,6 +224,15 @@ mod tests { | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     #[rstest] | ||||
|     #[case::without_dot(PathComponent { inner: "foo".into()}, None)] | ||||
|     #[case::simple(PathComponent { inner: "foo.txt".into()}, Some(&b"txt"[..]))] | ||||
|     #[case::empty(PathComponent { inner: "foo.".into()}, Some(&b""[..]))] | ||||
|     #[case::multiple(PathComponent { inner: "foo.bar.txt".into()}, Some(&b"txt"[..]))] | ||||
|     fn extension(#[case] p: PathComponent, #[case] exp_extension: Option<&[u8]>) { | ||||
|         assert_eq!(exp_extension, p.extension()) | ||||
|     } | ||||
| 
 | ||||
|     #[test] | ||||
|     fn error_toolong() { | ||||
|         assert_eq!( | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue