Move parsing functions to submodule

attempt/001
Elijah C. Voigt 1 year ago
parent 8027af5303
commit cfe3a9ce17

@ -21,15 +21,15 @@ struct SaveEntity {
}
impl SaveEntity {
fn parse(s: &str) -> Result<SaveEntity, SaveEntityParseError> {
fn parse(s: &str) -> Result<SaveEntity, parse::SaveEntityParseError> {
let lines = s.split('\n');
let mut entity = SaveEntity { ..default() };
lines.into_iter().for_each(|line| {
if let Ok(name) = parse_save_name(line) {
if let Ok(name) = parse::parse_save_name(line) {
entity.name = Some(name);
} else if let Ok(transform) = parse_save_transform(line) {
} else if let Ok(transform) = parse::parse_save_transform(line) {
entity.transform = Some(transform);
} else if let Ok(uuid) = parse_save_uuid(line) {
} else if let Ok(uuid) = parse::parse_save_uuid(line) {
entity.uuid = Some(uuid);
}
});
@ -37,8 +37,11 @@ impl SaveEntity {
}
}
mod parse {
use super::*;
#[derive(Error, Debug)]
enum SaveEntityParseError {
pub(crate) enum SaveEntityParseError {
#[error("Failed to parse Uuid: {0}")]
Uuid(#[from] uuid::Error),
#[error("Failed to parse name")]
@ -87,7 +90,7 @@ fn parse_wxyz<'a>(i: &'a str) -> IResult<&'a str, (f32, f32, f32, f32)> {
/// assert_eq!(parsed, expected);
/// ```
///
fn parse_save_transform(line: &str) -> Result<Transform, SaveEntityParseError> {
pub(crate) fn parse_save_transform(line: &str) -> Result<Transform, SaveEntityParseError> {
let (rem, _) = tag("transform")(line)?;
let mut transform = Transform::default();
@ -122,7 +125,7 @@ fn parse_save_transform(line: &str) -> Result<Transform, SaveEntityParseError> {
/// assert_eq!(parsed, expected);
/// ```
///
fn parse_save_name(line: &str) -> Result<Name, SaveEntityParseError> {
pub(crate) fn parse_save_name(line: &str) -> Result<Name, SaveEntityParseError> {
let (remainder, _) = tag("name")(line)?;
let n = remainder.trim().to_string();
if n.len() == 0 {
@ -141,7 +144,7 @@ fn parse_save_name(line: &str) -> Result<Name, SaveEntityParseError> {
/// assert_eq!(parsed, expected);
/// ```
///
fn parse_save_uuid(line: &str) -> Result<Uuid, SaveEntityParseError> {
pub(crate) fn parse_save_uuid(line: &str) -> Result<Uuid, SaveEntityParseError> {
let (remainder, _) = tag("uuid")(line)?;
let uuid = Uuid::try_parse(remainder.trim())?;
Ok(uuid)
@ -152,7 +155,8 @@ mod test {
#[test]
fn test_parse_transform() {
let line = "transform translation 1.0 2.0 3.0 rotation 0.1 0.2 0.3 1.0 scale 1.1 1.2 1.3";
let line =
"transform translation 1.0 2.0 3.0 rotation 0.1 0.2 0.3 1.0 scale 1.1 1.2 1.3";
let parsed = parse_save_transform(line).unwrap();
let expected = Transform {
translation: Vec3::new(1.0, 2.0, 3.0),
@ -190,6 +194,7 @@ mod test {
assert_eq!(parsed, expected);
}
}
}
#[derive(Default)]
struct SaveEntityLoader;
@ -199,7 +204,7 @@ enum SaveEntityLoaderError {
#[error("Could not load asset: {0}")]
Io(#[from] std::io::Error),
#[error("Could not parse entity: {0}")]
Parse(#[from] SaveEntityParseError),
Parse(#[from] parse::SaveEntityParseError),
}
impl AssetLoader for SaveEntityLoader {

Loading…
Cancel
Save