# Checklist for conformance to Rust API guidelines copied from [Rust API Guidelines - Checkliste](https://github.com/rust-lang/api-guidelines/blob/master/src/checklist.md), dated Aug 23, 2021, commit: [b2f62d6](https://github.com/rust-lang/api-guidelines/blob/master/src/checklist.md). ✔: done | 📅 (x.y): planned in release x.y | ⚪: n/a | ❌: failed ## Naming *(crate aligns with Rust naming conventions)*
✔ Casing conforms to RFC 430 ([C-CASE])
⚪ Ad-hoc conversions follow `as_`, `to_`, `into_` conventions ([C-CONV])
✔ Getter names follow Rust convention ([C-GETTER])
📅 (0.6) Methods on collections that produce iterators follow `iter`, `iter_mut`, `into_iter` ([C-ITER])
📅 (0.6) Iterator type names match the methods that produce them ([C-ITER-TY])
⚪ Feature names are free of placeholder words ([C-FEATURE])
❌ Names use a consistent word order ([C-WORD-ORDER])
## Interoperability *(crate interacts nicely with other library functionality)*
✔ Types eagerly implement common traits *(`Copy`, `Clone`, `Eq`, `PartialEq`, `Ord`, `PartialOrd`, `Hash`, `Debug`, `Display`, `Default`)* ([C-COMMON-TRAITS])
⚪ Conversions use the standard traits `From`, `AsRef`, `AsMut` ([C-CONV-TRAITS])
📅 (0.6) Collections implement `FromIterator` and `Extend` ([C-COLLECT])
📅 (0.5) Data structures implement Serde's `Serialize`, `Deserialize` ([C-SERDE])
⚪ Types are `Send` and `Sync` where possible ([C-SEND-SYNC])
📅 (0.3) Error types are meaningful and well-behaved ([C-GOOD-ERR])
⚪ Binary number types provide `Hex`, `Octal`, `Binary` formatting ([C-NUM-FMT])
⚪ Generic reader/writer functions take `R: Read` and `W: Write` by value ([C-RW-VALUE])
## Macros *(crate presents well-behaved macros)*
⚪ Input syntax is evocative of the output ([C-EVOCATIVE])
⚪ Macros compose well with attributes ([C-MACRO-ATTR])
⚪ Item macros work anywhere that items are allowed ([C-ANYWHERE])
⚪ Item macros support visibility specifiers ([C-MACRO-VIS])
⚪ Type fragments are flexible ([C-MACRO-TY])
## Documentation *(crate is abundantly documented)*
✔ Crate level docs are thorough and include examples ([C-CRATE-DOC])
📅 (0.3) All items have a rustdoc example ([C-EXAMPLE])
✔ Examples use `?`, not `try!`, not `unwrap` ([C-QUESTION-MARK])
✔ Function docs include error, panic, and safety considerations ([C-FAILURE])
📅 (0.3) Prose contains hyperlinks to relevant things ([C-LINK])
✔ Cargo.toml includes all common metadata *(authors, description, license, homepage, documentation, repository, keywords, categories)* ([C-METADATA])
✔ Release notes document all significant changes ([C-RELNOTES])
✔ Rustdoc does not show unhelpful implementation details ([C-HIDDEN])
## Predictability *(crate enables legible code that acts how it looks)*
⚪ Smart pointers do not add inherent methods ([C-SMART-PTR])
⚪ Conversions live on the most specific type involved ([C-CONV-SPECIFIC])
✔ Functions with a clear receiver are methods ([C-METHOD])
✔ Functions do not take out-parameters ([C-NO-OUT])
⚪ Operator overloads are unsurprising ([C-OVERLOAD])
⚪ Only smart pointers implement `Deref` and `DerefMut` ([C-DEREF])
✔ Constructors are static, inherent methods ([C-CTOR])
## Flexibility *(crate supports diverse real-world use cases)*
✔ Functions expose intermediate results to avoid duplicate work ([C-INTERMEDIATE])
📅 (0.3) Caller decides where to copy and place data ([C-CALLER-CONTROL])
✔ Functions minimize assumptions about parameters by using generics ([C-GENERIC])
✔ Traits are object-safe if they may be useful as a trait object ([C-OBJECT])
## Type safety *(crate leverages the type system effectively)*
⚪ Newtypes provide static distinctions ([C-NEWTYPE])
📅 (0.3) Arguments convey meaning through types, not `bool` or `Option` ([C-CUSTOM-TYPE])
⚪ Types for a set of flags are `bitflags`, not enums ([C-BITFLAG])
⚪ Builders enable construction of complex values ([C-BUILDER])
## Dependability *(crate is unlikely to do the wrong thing)*
✔ Functions validate their arguments ([C-VALIDATE])
⚪ Destructors never fail ([C-DTOR-FAIL])
⚪ Destructors that may block have alternatives ([C-DTOR-BLOCK])
## Debuggability *(crate is conducive to easy debugging)*
✔ All public types implement `Debug` ([C-DEBUG])
✔ `Debug` representation is never empty ([C-DEBUG-NONEMPTY])
## Future proofing *(crate is free to improve without breaking users' code)*
⚪ Sealed traits protect against downstream implementations ([C-SEALED])
✔ Structs have private fields ([C-STRUCT-PRIVATE])
⚪ Newtypes encapsulate implementation details ([C-NEWTYPE-HIDE])
✔ Data structures do not duplicate derived trait bounds ([C-STRUCT-BOUNDS])
## Necessities *(to whom they matter, they really matter)*
✔ Public dependencies of a stable crate are stable ([C-STABLE])
✔ Crate and its dependencies have a permissive license ([C-PERMISSIVE])
[C-CASE]: https://rust-lang.github.io/api-guidelines/naming.html#c-case [C-CONV]: https://rust-lang.github.io/api-guidelines/naming.html#c-conv [C-GETTER]: https://rust-lang.github.io/api-guidelines/naming.html#c-getter [C-ITER]: https://rust-lang.github.io/api-guidelines/naming.html#c-iter [C-ITER-TY]: https://rust-lang.github.io/api-guidelines/naming.html#c-iter-ty [C-FEATURE]: https://rust-lang.github.io/api-guidelines/naming.html#c-feature [C-WORD-ORDER]: https://rust-lang.github.io/api-guidelines/naming.html#c-word-order [C-COMMON-TRAITS]: https://rust-lang.github.io/api-guidelines/interoperability.html#c-common-traits [C-CONV-TRAITS]: https://rust-lang.github.io/api-guidelines/interoperability.html#c-conv-traits [C-COLLECT]: https://rust-lang.github.io/api-guidelines/interoperability.html#c-collect [C-SERDE]: https://rust-lang.github.io/api-guidelines/interoperability.html#c-serde [C-SEND-SYNC]: https://rust-lang.github.io/api-guidelines/interoperability.html#c-send-sync [C-GOOD-ERR]: https://rust-lang.github.io/api-guidelines/interoperability.html#c-good-err [C-NUM-FMT]: https://rust-lang.github.io/api-guidelines/interoperability.html#c-num-fmt [C-RW-VALUE]: https://rust-lang.github.io/api-guidelines/interoperability.html#c-rw-value [C-EVOCATIVE]: https://rust-lang.github.io/api-guidelines/macros.html#c-evocative [C-MACRO-ATTR]: https://rust-lang.github.io/api-guidelines/macros.html#c-macro-attr [C-ANYWHERE]: https://rust-lang.github.io/api-guidelines/macros.html#c-anywhere [C-MACRO-VIS]: https://rust-lang.github.io/api-guidelines/macros.html#c-macro-vis [C-MACRO-TY]: https://rust-lang.github.io/api-guidelines/macros.html#c-macro-ty [C-CRATE-DOC]: https://rust-lang.github.io/api-guidelines/documentation.html#c-crate-doc [C-EXAMPLE]: https://rust-lang.github.io/api-guidelines/documentation.html#c-example [C-QUESTION-MARK]: https://rust-lang.github.io/api-guidelines/documentation.html#c-question-mark [C-FAILURE]: https://rust-lang.github.io/api-guidelines/documentation.html#c-failure [C-LINK]: https://rust-lang.github.io/api-guidelines/documentation.html#c-link [C-METADATA]: https://rust-lang.github.io/api-guidelines/documentation.html#c-metadata [C-HTML-ROOT]: https://rust-lang.github.io/api-guidelines/documentation.html#c-html-root [C-RELNOTES]: https://rust-lang.github.io/api-guidelines/documentation.html#c-relnotes [C-HIDDEN]: https://rust-lang.github.io/api-guidelines/documentation.html#c-hidden [C-SMART-PTR]: https://rust-lang.github.io/api-guidelines/predictability.html#c-smart-ptr [C-CONV-SPECIFIC]: https://rust-lang.github.io/api-guidelines/predictability.html#c-conv-specific [C-METHOD]: https://rust-lang.github.io/api-guidelines/predictability.html#c-method [C-NO-OUT]: https://rust-lang.github.io/api-guidelines/predictability.html#c-no-out [C-OVERLOAD]: https://rust-lang.github.io/api-guidelines/predictability.html#c-overload [C-DEREF]: https://rust-lang.github.io/api-guidelines/predictability.html#c-deref [C-CTOR]: https://rust-lang.github.io/api-guidelines/predictability.html#c-ctor [C-INTERMEDIATE]: https://rust-lang.github.io/api-guidelines/flexibility.html#c-intermediate [C-CALLER-CONTROL]: https://rust-lang.github.io/api-guidelines/flexibility.html#c-caller-control [C-GENERIC]: https://rust-lang.github.io/api-guidelines/flexibility.html#c-generic [C-OBJECT]: https://rust-lang.github.io/api-guidelines/flexibility.html#c-object [C-NEWTYPE]: https://rust-lang.github.io/api-guidelines/type-safety.html#c-newtype [C-CUSTOM-TYPE]: https://rust-lang.github.io/api-guidelines/type-safety.html#c-custom-type [C-BITFLAG]: https://rust-lang.github.io/api-guidelines/type-safety.html#c-bitflag [C-BUILDER]: https://rust-lang.github.io/api-guidelines/type-safety.html#c-builder [C-VALIDATE]: https://rust-lang.github.io/api-guidelines/dependability.html#c-validate [C-DTOR-FAIL]: https://rust-lang.github.io/api-guidelines/dependability.html#c-dtor-fail [C-DTOR-BLOCK]: https://rust-lang.github.io/api-guidelines/dependability.html#c-dtor-block [C-DEBUG]: https://rust-lang.github.io/api-guidelines/debuggability.html#c-debug [C-DEBUG-NONEMPTY]: https://rust-lang.github.io/api-guidelines/debuggability.html#c-debug-nonempty [C-SEALED]: https://rust-lang.github.io/api-guidelines/future-proofing.html#c-sealed [C-STRUCT-PRIVATE]: https://rust-lang.github.io/api-guidelines/future-proofing.html#c-struct-private [C-NEWTYPE-HIDE]: https://rust-lang.github.io/api-guidelines/future-proofing.html#c-newtype-hide [C-STRUCT-BOUNDS]: https://rust-lang.github.io/api-guidelines/future-proofing.html#c-struct-bounds [C-STABLE]: https://rust-lang.github.io/api-guidelines/necessities.html#c-stable [C-PERMISSIVE]: https://rust-lang.github.io/api-guidelines/necessities.html#c-permissive