mod pin_argument {
    use pin_project::pin_project;

    #[pin_project]
    struct Struct {
        #[pin()] //~ ERROR unexpected token
        field: (),
    }

    #[pin_project]
    struct TupleStruct(#[pin(foo)] ()); //~ ERROR unexpected token

    #[pin_project]
    enum EnumTuple {
        V(#[pin(foo)] ()), //~ ERROR unexpected token
    }

    #[pin_project]
    enum EnumStruct {
        V {
            #[pin(foo)] //~ ERROR unexpected token
            field: (),
        },
    }
}

mod pin_attribute {
    use pin_project::pin_project;

    #[pin_project]
    struct DuplicateStruct {
        #[pin]
        #[pin] //~ ERROR duplicate #[pin] attribute
        field: (),
    }

    #[pin_project]
    struct DuplicateTupleStruct(
        #[pin]
        #[pin]
        (),
        //~^^ ERROR duplicate #[pin] attribute
    );

    #[pin_project]
    enum DuplicateEnumTuple {
        V(
            #[pin]
            #[pin]
            (),
            //~^^ ERROR duplicate #[pin] attribute
        ),
    }

    #[pin_project]
    enum DuplicateEnumStruct {
        V {
            #[pin]
            #[pin] //~ ERROR duplicate #[pin] attribute
            field: (),
        },
    }
}

mod pin_item {
    use pin_project::pin_project;

    #[pin_project]
    #[pin] //~ ERROR may only be used on fields of structs or variants
    struct Struct {
        #[pin]
        field: (),
    }

    #[pin_project]
    enum Variant {
        #[pin] //~ ERROR may only be used on fields of structs or variants
        V(()),
    }

    #[pin_project]
    #[pin] //~ ERROR may only be used on fields of structs or variants
    enum Enum {
        V(()),
    }
}

mod pin_project_argument {
    use pin_project::pin_project;

    #[pin_project(UnsafeUnpin,,)] //~ ERROR expected identifier
    struct Unexpected1(#[pin] ());

    #[pin_project(Foo)] //~ ERROR unexpected argument
    struct Unexpected2(#[pin] ());

    #[pin_project(,UnsafeUnpin)] //~ ERROR expected identifier
    struct Unexpected3(#[pin] ());

    #[pin_project()] // Ok
    struct Unexpected4(#[pin] ());

    #[pin_project(PinnedDrop, PinnedDrop)] //~ ERROR duplicate `PinnedDrop` argument
    struct DuplicatePinnedDrop(#[pin] ());

    #[pin_project(Replace, Replace)] //~ ERROR duplicate `Replace` argument
    struct DuplicateReplace(#[pin] ());

    #[pin_project(UnsafeUnpin, UnsafeUnpin)] //~ ERROR duplicate `UnsafeUnpin` argument
    struct DuplicateUnsafeUnpin(#[pin] ());

    #[pin_project(!Unpin, !Unpin)] //~ ERROR duplicate `!Unpin` argument
    struct DuplicateNotUnpin(#[pin] ());

    #[pin_project(PinnedDrop, UnsafeUnpin, UnsafeUnpin)] //~ ERROR duplicate `UnsafeUnpin` argument
    struct Duplicate3(#[pin] ());

    #[pin_project(PinnedDrop, UnsafeUnpin, PinnedDrop, UnsafeUnpin)] //~ ERROR duplicate `PinnedDrop` argument
    struct Duplicate4(#[pin] ());

    #[pin_project(PinnedDrop, Replace)] //~ ERROR arguments `PinnedDrop` and `Replace` are mutually exclusive
    struct PinnedDropWithReplace1(#[pin] ());

    #[pin_project(Replace, UnsafeUnpin, PinnedDrop)] //~ ERROR arguments `PinnedDrop` and `Replace` are mutually exclusive
    struct PinnedDropWithReplace2(#[pin] ());

    #[pin_project(UnsafeUnpin, !Unpin)] //~ ERROR arguments `UnsafeUnpin` and `!Unpin` are mutually exclusive
    struct UnsafeUnpinWithNotUnpin1(#[pin] ());

    #[pin_project(!Unpin, PinnedDrop, UnsafeUnpin)] //~ ERROR arguments `UnsafeUnpin` and `!Unpin` are mutually exclusive
    struct UnsafeUnpinWithNotUnpin2(#[pin] ());

    #[pin_project(!)] //~ ERROR unexpected end of input, expected `Unpin`
    struct NotUnpin1(#[pin] ());

    #[pin_project(Unpin)] //~ ERROR unexpected argument
    struct NotUnpin2(#[pin] ());
}

mod pin_project_attribute {
    use pin_project::pin_project;

    #[pin_project]
    #[pin_project] //~ ERROR duplicate #[pin_project] attribute
    struct Duplicate(#[pin] ());
}

mod pin_project_item {
    use pin_project::pin_project;

    #[pin_project]
    struct Struct {} //~ ERROR may not be used on structs with zero fields

    #[pin_project]
    struct TupleStruct(); //~ ERROR may not be used on structs with zero fields

    #[pin_project]
    struct UnitStruct; //~ ERROR may not be used on structs with zero fields

    #[pin_project]
    enum EnumEmpty {} //~ ERROR may not be used on enums without variants

    #[pin_project]
    enum EnumDiscriminant {
        V = 2, //~ ERROR may not be used on enums with discriminants
    }

    #[pin_project]
    enum EnumZeroFields {
        Unit, //~ ERROR may not be used on enums with zero fields
        Tuple(),
        Struct {},
    }

    #[pin_project]
    union Union {
        //~^ ERROR may only be used on structs or enums
        f: (),
    }
}

// #[repr(packed)] is always detected first, even on unsupported structs.
mod pin_project_item_packed {
    use pin_project::pin_project;

    #[pin_project]
    #[repr(packed)]
    struct Struct {} //~ ERROR may not be used on #[repr(packed)] types

    #[pin_project]
    #[repr(packed)]
    struct TupleStruct(); //~ ERROR may not be used on #[repr(packed)] types

    #[pin_project]
    #[repr(packed)]
    struct UnitStruct; //~ ERROR may not be used on #[repr(packed)] types
}

fn main() {}
