kingslayer 0.5.5

A text adventure dungeon crawler game written in Rust
Documentation
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct CmdTokens {
    verb: Option<String>,
    obj: Option<String>,
    prep: Option<String>,
    obj_prep: Option<String>,
}

impl CmdTokens {
    pub fn new<S>(verb: S) -> Self
    where
        S: Into<String>,
    {
        Self {
            verb: Some(verb.into()),
            obj: None,
            prep: None,
            obj_prep: None,
        }
    }

    pub fn with_obj<S>(mut self, obj: S) -> Self
    where
        S: Into<String>,
    {
        self.obj = Some(obj.into());
        self
    }

    pub fn with_prep<S>(mut self, prep: S) -> Self
    where
        S: Into<String>,
    {
        self.prep = Some(prep.into());
        self
    }

    pub fn with_obj_prep<S>(mut self, obj_prep: S) -> Self
    where
        S: Into<String>,
    {
        self.obj_prep = Some(obj_prep.into());
        self
    }

    pub fn from<OS>(verb: OS, obj: OS, prep: OS, obj_prep: OS) -> Self
    where
        OS: Into<Option<String>>,
    {
        Self {
            verb: verb.into(),
            obj: obj.into(),
            prep: prep.into(),
            obj_prep: obj_prep.into(),
        }
    }

    pub fn short_verb(&self) -> (Option<&str>, Option<&str>) {
        if let Some(verb) = &self.verb {
            if verb.len() >= 6 {
                (Some(verb), Some(&verb[0..6]))
            } else {
                (Some(verb), Some(verb))
            }
        } else {
            (None, None)
        }
    }
    pub fn verb(&self) -> Option<&str> {
        self.verb.as_deref()
    }
    pub fn obj(&self) -> Option<&str> {
        self.obj.as_deref()
    }
    pub fn prep(&self) -> Option<&str> {
        self.prep.as_deref()
    }
    pub fn obj_prep(&self) -> Option<&str> {
        self.obj_prep.as_deref()
    }
}