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>, Borrow<str>, and Deref<Target = str>. Moreover, equality comparison against string types is implemented for Symbol as well.

Examples

```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); ```

Features

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-* features enables support for encoding and decoding Symbols directly from sqlx queries and fetch results. Similar to serde, Symbols are encoded and decoded as &strs. sqlx requires a runtime to be selected in order for the crate to compile, so the following separate features correspond to sqlx runtimes, and you should pick one for the runetime you are using: - sqlx-actix-native-tls - sqlx-async-std-native-tls - sqlx-tokio-native-tls - sqlx-actix-rustls - sqlx-async-std-rustls - sqlx-tokio-rustls