Skip to content

A Rust library for strongly-typed string keys for configuration.

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

matklad/typed_key

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

typed_key

Build Status Crates.io API reference

Strongly-typed string keys for configuration.

A frequent task is to extract a typed value from an untyped Map<String, Object>. Typically, this is done via string keys: let port: u32 = map.get("port")?.parse()?. A slightly more type-safe approach is to associate certain types with corresponding string constants:

#[macro_use]
extern crate typed_key;
use typed_key::Key;

// `PORT` is basically `"port"` string with associated `u32` type.
const PORT: Key<u32> = typed_key!("port");

This crate provides basic building block for such strongly-typed strings. See example for a complete example of reading configuration, and the blog post for a more long winded explanation of the pattern.

Using string keys is totally fine for small isolated cases, but if this pattern is pervasive, typed_key can provide the following benefits:

  • Documentation: all possible keys are declared in one place, specify their type explicitly, and can have documentation comments.
  • Type safety: because each key carries its type, it's impossible to read the value of wrong type. Unlike string keys, typed keys never need a turbofish operator.
  • Typo safety: you can't misspell a type key on the call site.
  • Navigation: with typed_keys, you can use "go to definition", "find usages", and refactor without fear.

About

A Rust library for strongly-typed string keys for configuration.

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages