Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
use crate::utils::FromMeta;
use codama_nodes::BytesTypeNode;
use codama_syn_helpers::{extensions::*, Meta};

impl FromMeta for BytesTypeNode {
fn from_meta(meta: &Meta) -> syn::Result<Self> {
meta.assert_directive("bytes")?;
if !meta.is_path_or_empty_list() {
return Err(meta.error("bytes does not accept any input"));
}
Ok(Self::new())
}
}

#[cfg(test)]
mod tests {
use super::*;
use crate::{assert_type, assert_type_err};

#[test]
fn ok() {
assert_type!({ bytes }, BytesTypeNode::new().into());
assert_type!({ bytes() }, BytesTypeNode::new().into());
}

#[test]
fn unexpected_input() {
assert_type_err!({ bytes(unexpected) }, "bytes does not accept any input");
assert_type_err!({ bytes(foo = 42) }, "bytes does not accept any input");
}
}
1 change: 1 addition & 0 deletions codama-attributes/src/codama_directives/type_nodes/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
mod boolean_type_node;
mod bytes_type_node;
mod fixed_size_type_node;
mod number_type_node;
mod public_key_type_node;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
use crate::utils::FromMeta;
use codama_nodes::{
BooleanTypeNode, FixedSizeTypeNode, NumberTypeNode, PublicKeyTypeNode, RegisteredTypeNode,
StringTypeNode, StructFieldTypeNode, StructTypeNode, TypeNode,
BooleanTypeNode, BytesTypeNode, FixedSizeTypeNode, NumberTypeNode, PublicKeyTypeNode,
RegisteredTypeNode, StringTypeNode, StructFieldTypeNode, StructTypeNode, TypeNode,
};
use codama_syn_helpers::{extensions::*, Meta};

impl FromMeta for RegisteredTypeNode {
fn from_meta(meta: &Meta) -> syn::Result<Self> {
match meta.path_str().as_str() {
"boolean" => BooleanTypeNode::from_meta(meta).map(Self::from),
"bytes" => BytesTypeNode::from_meta(meta).map(Self::from),
"field" => StructFieldTypeNode::from_meta(meta).map(Self::from),
"fixed_size" => FixedSizeTypeNode::from_meta(meta).map(Self::from),
"number" => NumberTypeNode::from_meta(meta).map(Self::from),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
use codama_macros::codama;

#[codama(type = bytes)]
#[codama(type = bytes())]
pub struct Test;

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
use codama_macros::codama;

#[codama(type = bytes(foo = 42))]
pub struct Test;

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
error: bytes does not accept any input
--> tests/codama_attribute/type_nodes/bytes_type_node/with_input.fail.rs:3:17
|
3 | #[codama(type = bytes(foo = 42))]
| ^^^^^^^^^^^^^^^