//! > MacroExpand

//! > test_runner_name
test_macro_expand

//! > cairo_project.toml
[crate_roots]
hello = "src"

[config.global]
edition = "2024_07"

//! > cairo_code
#[d<caret>erive(Drop,<caret> Serde)]<caret>
struct <caret>A {
    a: felt252
}

//! > macro expand #0
// = source context
#[d<caret>erive(Drop, Serde)]
// = expansion
// lib.cairo
// ---------

#[derive(Drop, Serde)]
struct A {
    a: felt252
}

// impls
// -----

impl ADrop of core::traits::Drop<A>;
impl ASerde of core::serde::Serde<A> {
    fn serialize(self: @A, ref output: core::array::Array<felt252>) {
        core::serde::Serde::serialize(self.a, ref output)
    }
    fn deserialize(ref serialized: core::array::Span<felt252>) -> core::option::Option<A> {
        core::option::Option::Some(A { a: core::serde::Serde::deserialize(ref serialized)?, })
    }
}

//! > macro expand #1
// = source context
#[derive(Drop,<caret> Serde)]
// = expansion
// lib.cairo
// ---------

#[derive(Drop, Serde)]
struct A {
    a: felt252
}

// impls
// -----

impl ADrop of core::traits::Drop<A>;
impl ASerde of core::serde::Serde<A> {
    fn serialize(self: @A, ref output: core::array::Array<felt252>) {
        core::serde::Serde::serialize(self.a, ref output)
    }
    fn deserialize(ref serialized: core::array::Span<felt252>) -> core::option::Option<A> {
        core::option::Option::Some(A { a: core::serde::Serde::deserialize(ref serialized)?, })
    }
}

//! > macro expand #2
// = source context
#[derive(Drop, Serde)]<caret>
// = expansion
// lib.cairo
// ---------

#[derive(Drop, Serde)]
struct A {
    a: felt252
}

// impls
// -----

impl ADrop of core::traits::Drop<A>;
impl ASerde of core::serde::Serde<A> {
    fn serialize(self: @A, ref output: core::array::Array<felt252>) {
        core::serde::Serde::serialize(self.a, ref output)
    }
    fn deserialize(ref serialized: core::array::Span<felt252>) -> core::option::Option<A> {
        core::option::Option::Some(A { a: core::serde::Serde::deserialize(ref serialized)?, })
    }
}

//! > macro expand #3
// = source context
struct <caret>A {
// = expansion
// lib.cairo
// ---------

#[derive(Drop, Serde)]
struct A {
    a: felt252
}

// impls
// -----

impl ADrop of core::traits::Drop<A>;
impl ASerde of core::serde::Serde<A> {
    fn serialize(self: @A, ref output: core::array::Array<felt252>) {
        core::serde::Serde::serialize(self.a, ref output)
    }
    fn deserialize(ref serialized: core::array::Span<felt252>) -> core::option::Option<A> {
        core::option::Option::Some(A { a: core::serde::Serde::deserialize(ref serialized)?, })
    }
}
