As per https://rust-lang-nursery.github.io/api-guidelines/checklist.html :
Rust API Guidelines Checklist
Naming (crate aligns with Rust naming conventions)
Interoperability (crate interacts nicely with other library functionality)
Types eagerly implement common traits (C-COMMON-TRAITS )
Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug,
Display, Default
Conversions use the standard traits From, AsRef, AsMut (C-CONV-TRAITS )
Collections implement FromIterator and Extend (C-COLLECT )
Data structures implement Serde's Serialize, Deserialize (C-SERDE )
Crate has a "serde" cfg option that enables Serde (C-SERDE-CFG )
Types are Send and Sync where possible (C-SEND-SYNC )
Error types are Send and Sync (C-SEND-SYNC-ERR )
Error types are meaningful, not () (C-MEANINGFUL-ERR )
Binary number types provide Hex, Octal, Binary formatting (C-NUM-FMT )
Macros (crate presents well-behaved macros)
Documentation (crate is abundantly documented)
Crate level docs are thorough and include examples (C-CRATE-DOC )
All items have a rustdoc example (C-EXAMPLE )
Examples use ?, not try!, not unwrap (C-QUESTION-MARK )
Function docs include error conditions in "Errors" section (C-ERROR-DOC )
Function docs include panic conditions in "Panics" section (C-PANIC-DOC )
Prose contains hyperlinks to relevant things (C-LINK )
Cargo.toml includes all common metadata (C-METADATA )
authors, description, license, homepage, documentation, repository,
readme, keywords, categories
Cargo.toml documentation key points to "https://docs.rs/CRATE " (C-DOCS-RS )
Crate sets html_root_url attribute "https://docs.rs/CRATE/VER.SI.ON " (C-HTML-ROOT )
Release notes document all significant changes (C-RELNOTES )
Predictability (crate enables legible code that acts how it looks)
Flexibility (crate supports diverse real-world use cases)
Type safety (crate leverages the type system effectively)
Dependability (crate is unlikely to do the wrong thing)
Debuggability (crate is conducive to easy debugging)
Future proofing (crate is free to improve without breaking users' code)
Necessities (to whom they matter, they really matter)
As per https://rust-lang-nursery.github.io/api-guidelines/checklist.html:
Rust API Guidelines Checklist
as_,to_,into_conventions (C-CONV)iter,iter_mut,into_iter(C-ITER)_mutand_ref(C-OWN-SUFFIX)Copy,Clone,Eq,PartialEq,Ord,PartialOrd,Hash,Debug,Display,DefaultFrom,AsRef,AsMut(C-CONV-TRAITS)FromIteratorandExtend(C-COLLECT)Serialize,Deserialize(C-SERDE)"serde"cfg option that enables Serde (C-SERDE-CFG)SendandSyncwhere possible (C-SEND-SYNC)SendandSync(C-SEND-SYNC-ERR)()(C-MEANINGFUL-ERR)Hex,Octal,Binaryformatting (C-NUM-FMT)?, nottry!, notunwrap(C-QUESTION-MARK)readme, keywords, categories
DerefandDerefMut(C-DEREF)DerefandDerefMutnever fail (C-DEREF-FAIL)boolorOption(C-CUSTOM-TYPE)bitflags, not enums (C-BITFLAG)Debug(C-DEBUG)Debugrepresentation is never empty (C-DEBUG-NONEMPTY)