Rust API 가이드라인 체크리스트
- 명명 (크레이트가 Rust 명명 규칙을 따릅니다)
- 상호 운용성 (크레이트가 다른 라이브러리 기능과 잘 어우러집니다)
- 타입이 공통 트레이트를 적극적으로 구현합니다 (C-COMMON-TRAITS)
Copy,Clone,Eq,PartialEq,Ord,PartialOrd,Hash,Debug,Display,Default
- 변환에 표준 트레이트
From,AsRef,AsMut를 사용합니다 (C-CONV-TRAITS) - 컬렉션이
FromIterator와Extend를 구현합니다 (C-COLLECT) - 데이터 구조가 Serde의
Serialize,Deserialize를 구현합니다 (C-SERDE) - 타입이 가능한 한
Send이자Sync입니다 (C-SEND-SYNC) - 오류 타입이 의미 있고 올바르게 동작합니다 (C-GOOD-ERR)
- 이진수 타입이
Hex,Octal,Binary서식을 제공합니다 (C-NUM-FMT) - 제네릭 리더/라이터 함수는
R: Read와W: Write를 값으로 받습니다 (C-RW-VALUE)
- 타입이 공통 트레이트를 적극적으로 구현합니다 (C-COMMON-TRAITS)
- 매크로 (크레이트가 올바르게 동작하는 매크로를 제공합니다)
- 입력 구문이 출력을 연상시킵니다 (C-EVOCATIVE)
- 매크로가 속성과 잘 어우러집니다 (C-MACRO-ATTR)
- 아이템 매크로가 아이템이 허용되는 모든 곳에서 동작합니다 (C-ANYWHERE)
- 아이템 매크로가 가시성 지정자를 지원합니다 (C-MACRO-VIS)
- 매크로의 타입 프래그먼트는 유연합니다 (C-MACRO-TY)
- 문서화 (크레이트가 풍부하게 문서화되어 있습니다)
- 크레이트 수준 문서가 충실하며 예제를 포함합니다 (C-CRATE-DOC)
- 모든 아이템에 rustdoc 예제가 있습니다 (C-EXAMPLE)
- 예제에서
try!나unwrap이 아닌?를 사용합니다 (C-QUESTION-MARK) - 함수 문서에 오류, 패닉, 안전성 관련 고려 사항이 포함되어 있습니다 (C-FAILURE)
- 본문에 관련 항목으로 연결되는 하이퍼링크가 있습니다 (C-LINK)
- Cargo.toml에 모든 공통 메타데이터가 포함되어 있습니다 (C-METADATA)
- authors(저자), description(설명), license(라이선스), homepage(홈페이지), documentation(문서), repository(저장소), keywords(키워드), categories(카테고리)
- 릴리스 노트에 모든 주요 변경 사항을 기록합니다 (C-RELNOTES)
- rustdoc에 도움이 되지 않는 구현 세부 사항을 표시하지 않습니다 (C-HIDDEN)
- 예측 가능성 (크레이트를 쓰면 보이는 대로 동작하는 읽기 쉬운 코드를 작성할 수 있습니다)
- 스마트 포인터는 고유 메서드를 추가하지 않습니다 (C-SMART-PTR)
- 변환은 관련된 타입 중 가장 구체적인 타입에 둡니다 (C-CONV-SPECIFIC)
- 명확한 리시버가 있는 함수는 메서드입니다 (C-METHOD)
- 함수는 출력 매개변수를 받지 않습니다 (C-NO-OUT)
- 연산자 오버로딩은 예상을 벗어나지 않습니다 (C-OVERLOAD)
- 스마트 포인터만
Deref와DerefMut를 구현합니다 (C-DEREF) - 생성자는 정적 고유 메서드입니다 (C-CTOR)
- 유연성 (크레이트가 실제 환경의 다양한 사용 사례를 지원합니다)
- 함수는 중복 작업을 피할 수 있도록 중간 결과를 노출합니다 (C-INTERMEDIATE)
- 데이터를 어디에 복사하고 배치할지는 호출자가 결정합니다 (C-CALLER-CONTROL)
- 함수는 제네릭을 사용해 매개변수에 대한 가정을 최소화합니다 (C-GENERIC)
- 트레이트 객체로 유용하게 쓰일 수 있는 트레이트는 객체 안전합니다 (C-OBJECT)
- 타입 안전성 (크레이트가 타입 시스템을 효과적으로 활용합니다)
- newtype으로 정적인 구분을 제공합니다 (C-NEWTYPE)
- 인수는
bool이나Option이 아닌 타입으로 의미를 전달합니다 (C-CUSTOM-TYPE) - 플래그 집합을 나타내는 타입은 열거형이 아닌
bitflags로 만듭니다 (C-BITFLAG) - 빌더로 복잡한 값을 생성할 수 있습니다 (C-BUILDER)
- 신뢰성 (크레이트가 잘못된 동작을 할 가능성이 낮습니다)
- 함수는 인수를 검증합니다 (C-VALIDATE)
- 소멸자는 절대 실패하지 않습니다 (C-DTOR-FAIL)
- 블로킹될 수 있는 소멸자에는 대안이 있습니다 (C-DTOR-BLOCK)
- 디버깅 용이성 (크레이트를 쉽게 디버깅할 수 있습니다)
- 모든 공개 타입은
Debug를 구현합니다 (C-DEBUG) -
Debug표현은 절대 비어 있지 않습니다 (C-DEBUG-NONEMPTY)
- 모든 공개 타입은
- 향후 대비 (크레이트가 사용자 코드를 깨뜨리지 않고 자유롭게 개선될 수 있습니다)
- 봉인된 트레이트로 다운스트림 구현을 막습니다 (C-SEALED)
- 구조체의 필드는 비공개입니다 (C-STRUCT-PRIVATE)
- newtype으로 구현 세부 사항을 캡슐화합니다 (C-NEWTYPE-HIDE)
- 데이터 구조체는 파생된 트레이트 바운드를 중복해서 지정하지 않습니다 (C-STRUCT-BOUNDS)
- 필수 사항 (해당되는 경우에는 정말 중요합니다)
- 안정 크레이트의 공개 의존성은 안정적입니다 (C-STABLE)
- 크레이트와 그 의존성은 허용적 라이선스를 가집니다 (C-PERMISSIVE)