A data type for representing stock symbols.
The data associated with a Symbol
is allocated on the stack rather than the heap. In order to
accomodate this optimization, the length of a Symbol
is limited to 7 characters. The
representation in memory also allows for highly optimized comparisons, exceeding the performance of
stack-allocated arrays. Note because of its optimized size, Symbol
implements the Copy
trait,
and should be passed by value rather than by reference.
Symbol
s can be easily converted from and to &str
s via from_str
and
as_str
. For convenience, Symbol
also implements AsRef<str>
,
Borrow<str>
, and Deref<Target = str>
. Moreover, equality comparison against string types is
implemented for Symbol
as well.
```rust use stock_symbol::Symbol;
// Make a new symbol let symbol = Symbol::from_str("AAPL").unwrap();
// Symbols cannot be empty, and must contain fewer than 8 characters assert!(Symbol::fromstr("").iserr()); assert!(Symbol::fromstr("12345678").iserr());
// Symbols implement Copy let symbolcopy = symbol; asserteq!(symbol_copy, symbol);
// They can also be compared to strings... assert_eq!(symbol, "AAPL");
// ...and easily converted into strings let symbolstr: &str = symbol.asstr(); asserteq!(symbolstr, "AAPL");
// Symbol also implements Ord and Hash for use in other data structures let symbol2 = Symbol::from_str("BAC").unwrap(); assert!(symbol < symbol2);
let mut map = std::collections::HashMap::new(); map.insert(symbol, 123.0f64); ```
The serde
feature enables serde support. Symbol
s are currently serialized as, and deserialized
from strings. Other formats are unlikely to be supported in the future. If more direct control is
needed, then a custom serializer/deserializer can be made.
The sqlx
feature enables support for encoding and decoding Symbol
s directly from sqlx
queries
and fetch results. Similar to serde
, Symbol
s are encoded and decoded as &str
s.