mod pin_argument {
    use pin_project::pin_project;

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

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

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

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

mod pin_attribute {
    use pin_project::pin_project;

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

    #[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
            f: (),
        },
    }
}

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]
        f: (),
    }

    #[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(Replace)] //~ ERROR `Replace` argument was removed, use `project_replace` argument instead
    struct RemovedReplace(#[pin] ());

    #[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 expected `,`
    struct Unexpected5(#[pin] ());

    #[pin_project(PinnedDrop, PinnedDrop)] //~ ERROR duplicate `PinnedDrop` argument
    struct DuplicatePinnedDrop(#[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(project = A, project = B)] //~ ERROR duplicate `project` argument
    struct DuplicateProject(#[pin] ());

    #[pin_project(project = A, project_ref = A, project = B)] //~ ERROR duplicate `project` argument
    struct DuplicateProject2(#[pin] ());

    #[pin_project(project_ref = A, project_ref = B)] //~ ERROR duplicate `project_ref` argument
    struct DuplicateProjectRef(#[pin] ());

    #[pin_project(project_replace = A, project_replace = B)] //~ ERROR duplicate `project_replace` argument
    struct DuplicateProjectReplace1(#[pin] ());

    #[pin_project(project_replace, project_replace = B)] //~ ERROR duplicate `project_replace` argument
    struct DuplicateProjectReplace2(#[pin] ());

    #[pin_project(project_replace = A, project_replace)] //~ ERROR duplicate `project_replace` argument
    struct DuplicateProjectReplace3(#[pin] ());

    #[pin_project(project_replace = A)] // Ok
    struct ProjectReplaceWithoutReplace(#[pin] ());

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

    #[pin_project(project_replace, UnsafeUnpin, PinnedDrop)] //~ ERROR arguments `PinnedDrop` and `project_replace` are mutually exclusive
    struct PinnedDropWithProjectReplace2(#[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 expected `!Unpin`, found `!`
    struct NotUnpin1(#[pin] ());

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

    #[pin_project(project)] //~ ERROR expected `project = <identifier>`, found `project`
    struct Project1(#[pin] ());

    #[pin_project(project = )] //~ ERROR expected `project = <identifier>`, found `project =`
    struct Project2(#[pin] ());

    #[pin_project(project = !)] //~ ERROR expected identifier
    struct Project3(#[pin] ());

    #[pin_project(project_ref)] //~ ERROR expected `project_ref = <identifier>`, found `project_ref`
    struct ProjectRef1(#[pin] ());

    #[pin_project(project_ref = )] //~ ERROR expected `project_ref = <identifier>`, found `project_ref =`
    struct ProjectRef2(#[pin] ());

    #[pin_project(project_ref = !)] //~ ERROR expected identifier
    struct ProjectRef3(#[pin] ());

    #[pin_project(project_replace)] // Ok
    struct ProjectReplace1(#[pin] ());

    #[pin_project(project_replace = )] //~ ERROR expected `project_replace = <identifier>`, found `project_replace =`
    struct ProjectReplace2(#[pin] ());

    #[pin_project(project_replace = !)] //~ ERROR expected identifier
    struct ProjectReplace3(#[pin] ());

    #[pin_project(project_replace)] //~ ERROR `project_replace` argument requires a value when used on enums
    enum ProjectReplaceEnum {
        V(#[pin] ()),
    }
}

mod pin_project_conflict_naming {
    use pin_project::pin_project;

    #[pin_project(project = OrigAndProj)] //~ ERROR name `OrigAndProj` is the same as the original type name
    struct OrigAndProj(#[pin] ());

    #[pin_project(project_ref = OrigAndProjRef)] //~ ERROR name `OrigAndProjRef` is the same as the original type name
    struct OrigAndProjRef(#[pin] ());

    #[pin_project(project_replace = OrigAndProjOwn)] //~ ERROR name `OrigAndProjOwn` is the same as the original type name
    struct OrigAndProjOwn(#[pin] ());

    #[pin_project(project = A, project_ref = A)] //~ ERROR name `A` is already specified by `project` argument
    struct ProjAndProjRef(#[pin] ());

    #[pin_project(project = A, project_replace = A)] //~ ERROR name `A` is already specified by `project` argument
    struct ProjAndProjOwn(#[pin] ());

    #[pin_project(project_ref = A, project_replace = A)] //~ ERROR name `A` is already specified by `project_ref` argument
    struct ProjRefAndProjOwn(#[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: (),
    }

    #[pin_project]
    impl Impl {} //~ ERROR may only be used on structs or enums
}

// #[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() {}
