MCPcopy Create free account
hub / github.com/Rust-GPU/rust-gpu / parse

Method parse

crates/spirv-std/macros/src/image.rs:40–381  ·  view source on GitHub ↗
(input: ParseStream<'_>)

Source from the content-addressed store, hash-verified

38
39impl Parse for ImageType {
40 fn parse(input: ParseStream<'_>) -> syn::Result<Self> {
41 let mut sampled_type = None;
42 let mut dimensionality = None;
43 let mut arrayed = None;
44 let mut depth: Option<ImageDepth> = None;
45 let mut format = None;
46 let mut multisampled = None;
47 let mut sampled: Option<Sampled> = None;
48 let mut crate_root = None;
49 let mut components = None;
50
51 let starting_span = input.span();
52
53 macro_rules! set_unique {
54 ($id:ident = $ex:expr) => {{
55 if $id.replace($ex).is_some() {
56 return Err(syn::Error::new(
57 input.span(),
58 concat!("Unexpected duplicate parameter for `", stringify!($id), "`"),
59 ));
60 }
61 }};
62 }
63
64 macro_rules! peek_and_eat_value {
65 ($typ:ty) => {{
66 if input.peek(syn::Token![=]) {
67 input.parse::<syn::Token![=]>()?;
68 Some(input.parse::<$typ>()?)
69 } else {
70 None
71 }
72 }}
73 }
74
75 while !input.is_empty() {
76 if input.peek(syn::LitInt) {
77 let int = input.parse::<syn::LitInt>().unwrap();
78 set_unique!(
79 dimensionality = match (int.base10_digits(), int.suffix()) {
80 ("1", "D" | "d") => Dimensionality::OneD,
81 ("2", "D" | "d") => Dimensionality::TwoD,
82 ("3", "D" | "d") => Dimensionality::ThreeD,
83 _ => return Err(syn::Error::new(int.span(), "Unexpected integer")),
84 }
85 );
86 } else if input.peek(syn::Ident) {
87 let ident = input.parse::<Ident>().unwrap();
88
89 if ident == "buffer" {
90 set_unique!(dimensionality = Dimensionality::Buffer);
91 } else if ident == "cube" {
92 set_unique!(dimensionality = Dimensionality::Cube);
93 } else if ident == "rect" {
94 set_unique!(dimensionality = Dimensionality::Rect);
95 } else if ident == "subpass" {
96 set_unique!(dimensionality = Dimensionality::SubpassData);
97 } else if ident == "arrayed" {

Callers

nothing calls this directly

Calls 3

image_format_from_strFunction · 0.85
spanMethod · 0.80
as_refMethod · 0.45

Tested by

no test coverage detected