rust: Debug,Copy,PartialEq,Eq

이창주·2024년 4월 9일

rust에서 사용하는 주요 매크로의 생성 코드를 확인해보자.


use core::fmt::Formatter;
use std::fmt::Display;

#[derive(Debug, Copy, PartialEq, Eq)]
struct MyStruct {
    name: String,
}

impl Display for MyStruct {
    fn fmt(&self, _: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
        todo!()
    }
}

HIR


struct MyStruct {
    name: String,
}
#[automatically_derived]
impl ::core::fmt::Debug for MyStruct {
    #[inline]
    fn fmt<'_, '_, '_>(self: &'_ Self, f: &'_ mut ::core::fmt::Formatter<>)
        ->
            ::core::fmt::Result {
            ::core::fmt::Formatter::debug_struct_field1_finish(f, "MyStruct",
                "name", &&self.name)
        }
}
#[automatically_derived]
impl ::core::marker::Copy for MyStruct { }
#[automatically_derived]
impl ::core::marker::StructuralPartialEq for MyStruct { }
#[automatically_derived]
impl ::core::cmp::PartialEq for MyStruct {
    #[inline]
    fn eq<'_, '_>(self: &'_ Self, other: &'_ MyStruct)
        -> bool { self.name == other.name }
}
#[automatically_derived]
impl ::core::cmp::Eq for MyStruct {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_eq<'_>(self: &'_ Self)
        -> () { let _: ::core::cmp::AssertParamIsEq<String>; }
}

impl Display for MyStruct {
    fn fmt<'_, '_, '_>(self: &'_ Self, _: &'_ mut Formatter<'_>)
        ->
            Result<(),
            std::fmt::Error> {

            // The variable 'maybe_name' is consumed here ...
            // ... and is now unavailable.
            // println!("Hello again, {}", maybe_name.unwrap_or("world".into()));
            ::core::panicking::panic("not yet implemented")
        }
}
profile
coder,maker,custom

0개의 댓글