Protected Id is a macro for creating type-checked Id strings. This is intended to prevent errors caused by storing Ids as strings, and to provide a readonly interface to Ids.
```rust
extern crate protectedidderive;
struct SomeIdType { #[protected_value] id: String }
struct SomeOtherIdType { #[protected_value] id: String }
fn do_something (id: &SomeIdType) { // do something here }
// Compiles let id = SomeIdType::new(); do_something(&id);
// Does not compile let id = SomeOtherIdType::new(); do_something(&id);
```
The stored Id can be retrieved as a String
by calling id.unprotect()
.
```rust
extern crate protectedidderive;
struct SomeIdType { #[protected_value] id: String }
let id = SomeIdType::new(); let stored_id: String = id.unprotect(); ```
A protected Id can also be constructed from an existing String
(e.g. reading data from a database into a struct) by using the new_from(id: String)
associated function.
Any crate that uses protected_id must depend on the uuid crate