// rustfmt-normalize_comments: true
// rustfmt-wrap_comments: true
// rustfmt-indent_style: Visual

// Struct literal expressions.

fn main() {
    let x = Bar;

    // Comment
    let y = Foo { a: x };

    Foo { a: foo(), // comment
          // comment
          b: bar(),
          ..something };

    Fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { a: f(), b: b() };

    Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo { // Comment
                                                                                        a: foo(), /* Comment */
                                                                                        // Comment
                                                                                        b: bar() /* Comment */ };

    Foo { a: Bar, b: f() };

    Quux { x: if cond {
               bar();
           },
           y: baz() };

    Baz { x: yxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
          z: zzzzz /* test */ };

    A { // Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit
        // amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante
        // hendrerit. Donec et mollis dolor.
        first: item(),
        // Praesent et diam eget libero egestas mattis sit amet vitae augue.
        // Nam tincidunt congue enim, ut porta lorem lacinia consectetur.
        second: Item };

    Diagram { //                 o        This graph demonstrates how
              //                / \       significant whitespace is
              //               o   o      preserved.
              //              /|\   \
              //             o o o   o
              graph: G }
}
