GithubHelp home page GithubHelp logo

Comments (9)

simonjbeaumont avatar simonjbeaumont commented on June 25, 2024 1

This is similar to #383, where could conceivably attach arbitrary conformances or macros that are stated in the config file and it be up to the adopter to ensure these are available in their project.

It wouldn't be too different from the ability we have know to express additionalImports.

from swift-openapi-generator.

czechboy0 avatar czechboy0 commented on June 25, 2024 1

That's true, @simonjbeaumont, and the macro itself would contain the logic for how to e.g. implement Identifiable, instead of the generator having to know how to do it. I like that.

from swift-openapi-generator.

czechboy0 avatar czechboy0 commented on June 25, 2024

Hi @armintelker,

all generated types already conform to Equatable, as we generate the Hashable conformance (which includes Equatable).

Identifiable, on the other hand, is tricky, as it's not clear what the id property should return for arbitrary schemas. What would be your expectation?

from swift-openapi-generator.

armintelker avatar armintelker commented on June 25, 2024

Hey, thanks for the quick response.
I have overseen that the DTO is already conforming to Hashable. This makes, of course, everything a lot easier. So my request gets kind of needless.
Indeed the Identifiable protocol suggestion would be more like a "nice to have".
I could imagine that the generator could add the Identifiable to the model as soon it sees a property id exists that also conforms to the constraint of the protocol.

from swift-openapi-generator.

czechboy0 avatar czechboy0 commented on June 25, 2024

I could imagine that the generator could add the Identifiable to the model as soon it sees a property id exists that also conforms to the constraint of the protocol.

In theory yes, but my first instinct is that this would be considered out of scope of an OpenAPI generator. I think a separate build plugin that processes your Swift code and adds Identifiable to any struct that has an id property would be more appropriate, and more maintainable. This is a feature that would be useful outside of the OpenAPI context.

from swift-openapi-generator.

shadone avatar shadone commented on June 25, 2024

+1 to this. In my use case it would also be useful to have ability to add Identifiable conformance to some types. There is literally no other way to do this - I have a library that uses swift-openapi-generator to generate the type and expose them publicly.

It would be nice if Swift allowed to add public conformance to a protocol in an extension:

public extension Components.Schemas.SortType: Identifiable { // compiler error: 'public' modifier cannot be used with extensions that declare protocol conformances
    public var id: String { rawValue }
}

Unfortunately this is not possible in Swift, so the only solution I can see is to solve it in the openapi generator.

from swift-openapi-generator.

czechboy0 avatar czechboy0 commented on June 25, 2024

Hi @shadone,

does this work?

extension Components.Schemas.SortType: Identifiable {
    public var id: String { rawValue }
}

(without the public modifier on the extension, only on the id property).

from swift-openapi-generator.

shadone avatar shadone commented on June 25, 2024

<deleted previous content> I completely misunderstood what czechboy0 was saying

That work indeed, thanks @czechboy0 ! To be honest I had no idea this is possible, despite years of writing Swift code. And to be honest I do not understand why this works (does the SortType publicly conform to the protocol here or just the "shape" of the protocol)

But it works great, thanks!

from swift-openapi-generator.

czechboy0 avatar czechboy0 commented on June 25, 2024

does the SortType publicly conform to the protocol here or just the "shape" of the protocol

I believe the visibility of the conformance is always derived from the visibility of the extended type and the protocol, i.e. there is no way to privately conform a public type to a public protocol.

But to get more details, starting a thread on the Swift Forums might be a good next step, if you're interested in the lower level compiler details.

from swift-openapi-generator.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.