#symbol #stock #string


A data type for representing stock symbols

4 releases (2 breaking)

0.3.1 Dec 19, 2022
0.3.0 Aug 13, 2022
0.2.0 Aug 9, 2022
0.1.0 Aug 9, 2022

#195 in Compression

24 downloads per month

MIT license

258 lines

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.

Symbols can be easily converted from and to &strs via from_str and as_str. For convenience, Symbol also implements AsRef<str>, and Deref<Target = str>. Moreover, equality comparison against string types is implemented for Symbol as well.


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

// Symbols implement Copy
let symbol_copy = symbol;
assert_eq!(symbol_copy, symbol);

// They can also be compared to strings...
assert_eq!(symbol, "AAPL");

// ...and easily converted into strings
let symbol_str: &str = symbol.as_str();
assert_eq!(symbol_str, "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. Symbols 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 Symbols directly from sqlx queries and fetch results. Similar to serde, Symbols are encoded and decoded as &strs.


~29K SLoC