From fa471dd90484136230e2b7315f2d5ed5b3e5a0c8 Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 16 Dec 2021 20:23:58 +0000 Subject: [PATCH] add files --- azalea-core/src/resource_location.rs | 58 ++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 azalea-core/src/resource_location.rs diff --git a/azalea-core/src/resource_location.rs b/azalea-core/src/resource_location.rs new file mode 100644 index 00000000..df706e7a --- /dev/null +++ b/azalea-core/src/resource_location.rs @@ -0,0 +1,58 @@ +//! A resource, like minecraft:stone + +pub struct ResourceLocation<'a> { + pub namespace: &'a str, + pub path: &'a str, +} + +static DEFAULT_NAMESPACE: &str = "minecraft"; +// static REALMS_NAMESPACE: &str = "realms"; + +impl<'a> ResourceLocation<'a> { + pub fn new(resource_string: &str) -> Result { + let sep_byte_position_option = resource_string.chars().position(|c| c == ':'); + let (namespace, path) = if let Some(sep_byte_position) = sep_byte_position_option { + if sep_byte_position == 0 { + (DEFAULT_NAMESPACE, &resource_string[1..]) + } else { + ( + &resource_string[..sep_byte_position], + &resource_string[sep_byte_position + 1..], + ) + } + } else { + (DEFAULT_NAMESPACE, resource_string) + }; + Ok(ResourceLocation { namespace, path }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn basic_resource_location() { + let r = ResourceLocation::new("abcdef:ghijkl").unwrap(); + assert_eq!(r.namespace, "abcdef"); + assert_eq!(r.path, "ghijkl"); + } + #[test] + fn no_namespace() { + let r = ResourceLocation::new("azalea").unwrap(); + assert_eq!(r.namespace, "minecraft"); + assert_eq!(r.path, "azalea"); + } + #[test] + fn colon_start() { + let r = ResourceLocation::new(":azalea").unwrap(); + assert_eq!(r.namespace, "minecraft"); + assert_eq!(r.path, "azalea"); + } + #[test] + fn colon_end() { + let r = ResourceLocation::new("azalea:").unwrap(); + assert_eq!(r.namespace, "azalea"); + assert_eq!(r.path, ""); + } +}