
260
이펙티브 러스트
았는데 전이 관계에 있는 다른 의존성이 활성화했다면 컴파일되지 않는다. 문제의 핵심은 해당
피처가 있는 크레이트만 그 피처를 확인할 수 있다는 데 있다. 해당 크레이트의 사용자로서는
카고가
somecrate
/
schema
를 켰는지 여부를 확인할 방법이 없다. 따라서
구조체에서 피처에
의해 조건부로 활성화되는
feature
-
gating
공개 필드를 가급적 사용하지 마라.
트레이트가 정의된 크레이트 밖에서 사용하기 위한 공개 트레이트에 대해서도 마찬가지다. 예
를 들어 다음과 같이 소속 메서드 중 하나에 피처 게이트
feature
-
gate
가 포함된 트레이트를 생각해
보자.
의도하지 않은 동작 발생
/// CBOR 직렬화를 지원하는 항목에 대한 트레이트
pub trait AsCbor: Sized {
/// 이 항목을 CBOR 직렬화된 데이터로 변환한다.
fn serialize(&self) -> Result<Vec<u8>, Error>;
/// CBOR 직렬화된 데이터로부터 이 항목의 인스턴스를 생성한다.
fn deserialize(data: &[u8]) -> Result<Self, Error>;
/// 이 항목에 대한 스키마를 반환한다.
#[cfg(feature = "schema")]
fn cddl(&self) -> String;
}
이 경우에도 ...