add files

This commit is contained in:
mat 2021-12-16 20:23:58 +00:00
parent dd66441e72
commit fa471dd904

View file

@ -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<ResourceLocation, String> {
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, "");
}
}