-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Labels
readyProblem understood well. Ready for development.Problem understood well. Ready for development.
Milestone
Description
Status
- Ready to be implemented.
- If problems found it may introduce breaking changes. As such it's aimed for 0.3.0
- All new features planned for 0.3.0 must follow the guidelines; so - ideally - this ticket should be implemented first
Rationale
There are well defined Rust API Guidelines and Maiko, as a public library, must follow them with no exception.
Checklist
Here is a copy-paste of the checklist provided by the guidelines. Completion of this ticket requires that each item has been checked. Some items might be irrelevant to Maiko - if that's verified - mark them as checked.
- 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])
- Methods on collections that produce iterators follow
iter,iter_mut,into_iter([C-ITER]) - 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 ([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
FromIteratorandExtend([C-COLLECT]) - Data structures implement Serde's
Serialize,Deserialize([C-SERDE]) - Types are
SendandSyncwhere possible ([C-SEND-SYNC]) - Error types are meaningful and well-behaved ([C-GOOD-ERR])
- Binary number types provide
Hex,Octal,Binaryformatting ([C-NUM-FMT]) - Generic reader/writer functions take
R: ReadandW: Writeby value ([C-RW-VALUE])
- Types eagerly implement common traits ([C-COMMON-TRAITS])
- 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])
- All items have a rustdoc example ([C-EXAMPLE])
- Examples use
?, nottry!, notunwrap([C-QUESTION-MARK]) - Function docs include error, panic, and safety considerations ([C-FAILURE])
- Prose contains hyperlinks to relevant things ([C-LINK])
- Cargo.toml includes all common metadata ([C-METADATA])
- authors, description, license, homepage, documentation, repository,
keywords, categories
- authors, description, license, homepage, documentation, repository,
- 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
DerefandDerefMut([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])
- 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])
- Arguments convey meaning through types, not
boolorOption([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]) -
Debugrepresentation is never empty ([C-DEBUG-NONEMPTY])
- All public types implement
- 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])
Acceptance criteria
- Check the code (all code, all features) against the list above
- If any inconsistency with the guidelines found, apply the following (No exceptions):
- change the code to match the guidelines,
- if the code can't be changed yet, add the required change to the todo list below
- report inconsistencies/changes in the comments below for reference,
- if relevant - update the changelog document,
- This ticket is a blocker for releasing 0.3.0
Required changes
This section contains already identified issues, that hasn't been implemented yet. Treat it as a TODO list. If more problems found, add them here if they cannot be implemented immediately.
-
ActorIddoesn't implement some of the requiredstdtraits (C-COMMON-TRAITS) ) -
Metadoesn't implement some of the requiredstdtraits (C-COMMON-TRAITS) ) -
EnvelopeandActorIdimplementDerefthat violates Only smart pointers implement Deref and DerefMut (C-DEREF) - Change license to dual: MIT + Apache (C-PERMISSIVE)
- Make
Configfields private and provide getters for them
Development work suggestions
This ticket may take multiple stages to implement. Keep all partial changes in sync with v0.3.0 branch (already created), so once the version released, all changes will be grouped there.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
readyProblem understood well. Ready for development.Problem understood well. Ready for development.