#error #yaml #serde-yaml #serde

id_newtype

Implements logic for a Cow<'static, str> newtype where only [A-Za-z0-9_] are valid characters

1 unstable release

0.1.0 Feb 1, 2025

#390 in Configuration

Download history 123/week @ 2025-01-28 39/week @ 2025-02-04

162 downloads per month

MIT/Apache

16KB
192 lines

🪪 id_newtype

Crates.io docs.rs CI Coverage Status

Implements logic for a Cow<'static, str> newtype where only [A-Za-z0-9_] are valid characters.

Implementations are provided for:

  • IdType::new
  • IdType::new_unchecked (with #[doc(hidden)])
  • IdType::is_valid_id
  • IdType::into_inner
  • std::borrow::Borrow<str>
  • std::convert::AsRef<str>
  • std::convert::TryFrom<String>
  • std::convert::TryFrom<&'static str>
  • std::fmt::Display
  • std::ops::Deref
  • std::ops::DerefMut
  • std::str::FromStr

A separate error type is also generated, which indicates an invalid value when the ID type is instantiated with new.

Usage

use std::borrow::Cow;

// Rename your ID type
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
pub struct MyIdType(Cow<'static, str>);

crate::id_newtype!(
    MyIdType,           // Name of the ID type
    MyIdTypeInvalidFmt  // Name of the invalid value error
);

If you have a procedural macro that checks for ID validity1 at compile time, you may pass in its name as follows:

use std::borrow::Cow;

// replace this with your ID type's macro
use my_crate_static_check_macros::my_id_type;

// Rename your ID type
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
pub struct MyIdType(Cow<'static, str>);

crate::id_newtype!(
    MyIdType,           // Name of the ID type
    MyIdTypeInvalidFmt, // Name of the invalid value error
    my_id_type          // Name of the static check macro
);

1 This crate was extracted from peace, so the my_crate_static_check_macros is not generated for you. You must implement it yourself. See static_check_macros for an example.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~215KB