arcis-interface 0.9.6

Defines the data interface and core types for Arcis circuits.
Documentation
pub fn snake_case_to_camel_case(s: &str) -> String {
    s.split('_') // Split by underscores
        .map(|c| {
            let mut c_mut = c.to_string(); // Create a mutable String
            make_ascii_titlecase(&mut c_mut);
            c_mut
        })
        .collect::<String>()
}

fn make_ascii_titlecase(s: &mut str) {
    if let Some(r) = s.get_mut(0..1) {
        r.make_ascii_uppercase();
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_basic_conversion() {
        assert_eq!(snake_case_to_camel_case("hello_world"), "HelloWorld");
    }

    #[test]
    fn test_leading_underscore() {
        assert_eq!(
            snake_case_to_camel_case("_leading_underscore"),
            "LeadingUnderscore"
        );
    }

    #[test]
    fn test_trailing_underscore() {
        assert_eq!(
            snake_case_to_camel_case("trailing_underscore_"),
            "TrailingUnderscore"
        );
    }

    #[test]
    fn test_double_underscore() {
        assert_eq!(
            snake_case_to_camel_case("double__underscore"),
            "DoubleUnderscore"
        );
    }

    #[test]
    fn test_empty_string() {
        assert_eq!(snake_case_to_camel_case(""), "");
    }

    #[test]
    fn test_single_word() {
        assert_eq!(snake_case_to_camel_case("single"), "Single");
    }
}