Skip to content

Commit 0f344bc

Browse files
committed
Add bytes type directive
1 parent a4b8a42 commit 0f344bc

File tree

6 files changed

+53
-2
lines changed

6 files changed

+53
-2
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use crate::utils::FromMeta;
2+
use codama_nodes::BytesTypeNode;
3+
use codama_syn_helpers::{extensions::*, Meta};
4+
5+
impl FromMeta for BytesTypeNode {
6+
fn from_meta(meta: &Meta) -> syn::Result<Self> {
7+
meta.assert_directive("bytes")?;
8+
if !meta.is_path_or_empty_list() {
9+
return Err(meta.error("bytes does not accept any input"));
10+
}
11+
Ok(Self::new())
12+
}
13+
}
14+
15+
#[cfg(test)]
16+
mod tests {
17+
use super::*;
18+
use crate::{assert_type, assert_type_err};
19+
20+
#[test]
21+
fn ok() {
22+
assert_type!({ bytes }, BytesTypeNode::new().into());
23+
assert_type!({ bytes() }, BytesTypeNode::new().into());
24+
}
25+
26+
#[test]
27+
fn unexpected_input() {
28+
assert_type_err!({ bytes(unexpected) }, "bytes does not accept any input");
29+
assert_type_err!({ bytes(foo = 42) }, "bytes does not accept any input");
30+
}
31+
}

codama-attributes/src/codama_directives/type_nodes/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
mod boolean_type_node;
2+
mod bytes_type_node;
23
mod fixed_size_type_node;
34
mod number_type_node;
45
mod public_key_type_node;

codama-attributes/src/codama_directives/type_nodes/type_node.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
use crate::utils::FromMeta;
22
use codama_nodes::{
3-
BooleanTypeNode, FixedSizeTypeNode, NumberTypeNode, PublicKeyTypeNode, RegisteredTypeNode,
4-
StringTypeNode, StructFieldTypeNode, StructTypeNode, TypeNode,
3+
BooleanTypeNode, BytesTypeNode, FixedSizeTypeNode, NumberTypeNode, PublicKeyTypeNode,
4+
RegisteredTypeNode, StringTypeNode, StructFieldTypeNode, StructTypeNode, TypeNode,
55
};
66
use codama_syn_helpers::{extensions::*, Meta};
77

88
impl FromMeta for RegisteredTypeNode {
99
fn from_meta(meta: &Meta) -> syn::Result<Self> {
1010
match meta.path_str().as_str() {
1111
"boolean" => BooleanTypeNode::from_meta(meta).map(Self::from),
12+
"bytes" => BytesTypeNode::from_meta(meta).map(Self::from),
1213
"field" => StructFieldTypeNode::from_meta(meta).map(Self::from),
1314
"fixed_size" => FixedSizeTypeNode::from_meta(meta).map(Self::from),
1415
"number" => NumberTypeNode::from_meta(meta).map(Self::from),
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
use codama_macros::codama;
2+
3+
#[codama(type = bytes)]
4+
#[codama(type = bytes())]
5+
pub struct Test;
6+
7+
fn main() {}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
use codama_macros::codama;
2+
3+
#[codama(type = bytes(foo = 42))]
4+
pub struct Test;
5+
6+
fn main() {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
error: bytes does not accept any input
2+
--> tests/codama_attribute/type_nodes/bytes_type_node/with_input.fail.rs:3:17
3+
|
4+
3 | #[codama(type = bytes(foo = 42))]
5+
| ^^^^^^^^^^^^^^^

0 commit comments

Comments
 (0)