Skip to content

Commit 5daa9ba

Browse files
committed
der: draft of test for IsConstructed vs Tagged edge case
1 parent 1ce6607 commit 5daa9ba

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

Diff for: der/tests/derive.rs

+51
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,57 @@ mod choice {
180180
assert_eq!(TIME_DER, encoder.finish().unwrap());
181181
}
182182
}
183+
184+
mod generic_implicit {
185+
use der::{
186+
Choice, Decode, Encode, SliceWriter,
187+
asn1::{BitStringRef, GeneralizedTime},
188+
};
189+
use hex_literal::hex;
190+
191+
/// PKCS#15 ObjectValue
192+
#[derive(Choice, Clone, Debug, Eq, PartialEq)]
193+
pub enum ObjectValue<T>
194+
where
195+
for<'a> T: Encode + Decode<'a> + EncodeValue + Tagged,
196+
{
197+
#[asn1(tag_mode = "EXPLICIT")]
198+
Indirect(ReferencedValue),
199+
200+
#[asn1(context_specific = "0", tag_mode = "EXPLICIT")]
201+
Direct(T),
202+
}
203+
204+
/// ```asn1
205+
/// RSAPublicKeyChoice ::= CHOICE {
206+
/// raw RSAPublicKey,
207+
/// spki [1] SubjectPublicKeyInfo, -- See ISO/IEC 9594-8. Must contain a public RSA key.
208+
/// ...
209+
/// }
210+
/// ```
211+
#[derive(Choice, Clone, Debug, Eq, PartialEq)]
212+
#[serde(deny_unknown_fields)]
213+
pub enum RSAPublicKeyChoice {
214+
/// `raw RSAPublicKey`
215+
Raw(RSAPublicKey),
216+
}
217+
218+
// TODO
219+
pub type ReferencedValue = ReferencedValueChoice;
220+
221+
/// ```asn1
222+
/// ReferencedValue {Type} ::= CHOICE {
223+
/// path Path,
224+
/// url URL
225+
/// } (CONSTRAINED BY {-- 'path' or 'url' shall point to an object of type -- Type})
226+
/// ```
227+
#[derive(Clone, Debug, Eq, PartialEq, Choice, Serialize, Deserialize)]
228+
pub enum ReferencedValueChoice {
229+
Path(Path),
230+
// todo
231+
URL(Url),
232+
}
233+
}
183234
}
184235

185236
/// Custom derive test cases for the `Enumerated` macro.

0 commit comments

Comments
 (0)