% Design Requirements

# Requirements

Function States
- Desired safe
- Unknown (propage?)
- Explicitly safe
- Explicitly unsafe

`req_safe` trait methods in implementations must me marked `req_safe` or `is_safe`

Annotation storage
- Local attributes/cache
- Crate metadata
- External list (what format, and where is it from?)
 - An external file would have to be able to encode all function paths

# Draft

- `#[req_safe(type)] fn` - Indicates that safety is desired.
- `#[is_safe(type)] fn` - Indicates that the function is safe (regardless of the body)
- `#[not_safe(type)] fn` - Indicates that the function is NOT safe (regardless of the body)
- `#[tagged_safe(type="db_path",...)] extern crate` - Load safety information for the listed tag from the provided file

