Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I think you can do something like this with your Rust code using macros.

  struct P0{}
  
  impl P0{
    fn write(self:&Self,pin:usize){
        std::println!("Writing port P0 on pin {}",pin);
    }
  }

  struct P1{}

  impl P1{
    fn write(self:&Self,pin:usize){
        std::println!("Writing port P1 on pin {}",pin);
    }
  }

  macro_rules! for_each_port_pin{
    ($port:ident,$pin:ident,$b:block, 
  $(($e1:expr,$e2:expr)),*) =>{
        $(
        let $port = $e1;
        let $pin = $e2;
        $b
        );*
    }
  }

  fn main(){
    let p0 = P0{};
    let p1 = P1{};
    
    for_each_port_pin!(port,pin,
    {port.write(pin);},
    (&p0,10usize),(&p1,7usize)
    );
  }
Rust playground link: https://play.rust-lang.org/?version=stable&mode=debug&editio...


Or a trait...


Yeah, I was thinking trait while reading that bit... maybe I missed something?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: