open import Agda.Builtin.Nat using (_+_) renaming (Nat to )

record Foo : Set where
  field foo : 
        @0 bar : 

getFoo : Foo  
getFoo record {foo = n} = n

_+Foo_ : Foo  Foo  Foo
a +Foo b = record
  { foo = a .Foo.foo + b .Foo.foo
  ; bar = a .Foo.bar + b .Foo.bar }

testFoo : 
testFoo = (record {foo = 21; bar = 1} +Foo record {foo = 21; bar = 2}).Foo.foo

data Bar : Set where
  bar :   @0   Bar

getBar : Bar  
getBar (bar n _) = n

_+Bar_ : Bar  Bar  Bar
(bar a0 a1) +Bar (bar b0 b1) = bar (a0 + b0) (a1 + b1)

testBar : 
testBar with bar 21 1 +Bar bar 21 2
... | bar n _ = n

{-# FOREIGN AGDA2RUST
pub fn main() {
  println!("{}:\t {} | {} | {} | {}", module_path!(),
    testFoo(),
    testBar(),
    getFoo(Foo{foo: 42}),
    getBar(Bar::bar(42)),
  );
}
#-}