fp-bindgen 3.0.0

Bindings generator for full-stack WASM plugins
Documentation
use inflector::Inflector;
use std::convert::TryFrom;

#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum Casing {
    Original,
    CamelCase,
    PascalCase,
    SnakeCase,
    ScreamingSnakeCase,
}

impl Casing {
    pub fn as_maybe_str(&self) -> Option<&'static str> {
        match self {
            Self::Original => None,
            Self::CamelCase => Some("camelCase"),
            Self::PascalCase => Some("PascalCase"),
            Self::SnakeCase => Some("snake_case"),
            Self::ScreamingSnakeCase => Some("SCREAMING_SNAKE_CASE"),
        }
    }

    pub fn format_string(&self, string: &str) -> String {
        match self {
            Self::Original => string.to_owned(),
            Self::CamelCase => string.to_camel_case(),
            Self::PascalCase => string.to_pascal_case(),
            Self::SnakeCase => string.to_snake_case(),
            Self::ScreamingSnakeCase => string.to_screaming_snake_case(),
        }
    }
}

impl Default for Casing {
    fn default() -> Self {
        Self::Original
    }
}

impl TryFrom<&str> for Casing {
    type Error = String;

    fn try_from(value: &str) -> Result<Self, Self::Error> {
        match value {
            "camelCase" => Ok(Self::CamelCase),
            "PascalCase" => Ok(Self::PascalCase),
            "snake_case" => Ok(Self::SnakeCase),
            "SCREAMING_SNAKE_CASE" => Ok(Self::ScreamingSnakeCase),
            other => Err(format!("Unrecognized case format: {other}")),
        }
    }
}