Git Product home page Git Product logo

Comments (13)

serj-lotutovici avatar serj-lotutovici commented on July 26, 2024 1

@SerializeOnly and @DeserializeOnly are cool when you require only one or the other. But may be @Saketme has a point, and moshi-auto-value needs a @Transient annotation that would completely exclude the field from the generated adapter.

from auto-value-moshi.

rharter avatar rharter commented on July 26, 2024 1

from auto-value-moshi.

vanniktech avatar vanniktech commented on July 26, 2024

See #41

from auto-value-moshi.

saket avatar saket commented on July 26, 2024

@vanniktech Interesting. So is it possible to create a custom @JsonQualifier annotation that can apply on any type of fields?

from auto-value-moshi.

vanniktech avatar vanniktech commented on July 26, 2024

Just look at the project and the tests and you'll see everything

from auto-value-moshi.

saket avatar saket commented on July 26, 2024

Yea I tried going through it, but it seems like I will have to spend a considerable amount of time to understand the code 😅. I will look into it again after office.

Still, considering that moshi supports transient fields, there's no reason for auto-value-moshi to not support it.

from auto-value-moshi.

vanniktech avatar vanniktech commented on July 26, 2024

This one and that one is all you need to go through.

from auto-value-moshi.

serj-lotutovici avatar serj-lotutovici commented on July 26, 2024

I took a deeper look into this. So at the moment adding Transient could work but in a very nasty way:

  • If the return type is a primitive then we just leverage from the default value that the extensions sets and just omit generating the case block for it's name.
  • The fun starts if it's not a primitive, then we have to force (at least that's what comes into my mind) the user to specify a @Nullable annotation as well. Otherwise auto-value will generate a null check in the constructor which will throw a soon as the adapter invokes it. And that's ugly (altho not illogical).

What are your thoughts? @rharter would you support such an approach?

from auto-value-moshi.

ZacSweers avatar ZacSweers commented on July 26, 2024

I'd like to propose accepting any annotation with this name as fuzzy matching (similar to how dagger or autovalue handle nullability annotations). I agree it would be ugly, and would prefer to wait and see if AV opens up its builders to the extension API.

For reference types, would could fail this at annotation compilation time if we don't have a builder to fallback on.

from auto-value-moshi.

rharter avatar rharter commented on July 26, 2024

We've got a PR in review now for auto-value-gson that would address this and deal with the challenges @serj-lotutovici identified. It adds an @Ignore annotation, with an enum that allows you to specify ignoring SERIALIZATION, DESERIALIZATION or BOTH (default).

As you pointed out, this can make code that will crash at runtime, so we updated the constructor of the generated TypeAdapter to require fields that aren't @Nullable as default values. I think it'll be fairly easy to port over once we get it finished up there.

from auto-value-moshi.

serj-lotutovici avatar serj-lotutovici commented on July 26, 2024

I can take over this, if everyone is ok with that... will come up with a pr later today.

from auto-value-moshi.

ZacSweers avatar ZacSweers commented on July 26, 2024

I mentioned this in another discussion sometime back, but what do you guys think of creating a shared repo of annotations? I foresee a lot of these being duplicated, or being a bit confusing.

@Ignore/@Transient

I also still think the better long term solution is to rely on a builder, but with no real idea of when that would happen then I think this is fine for now

from auto-value-moshi.

serj-lotutovici avatar serj-lotutovici commented on July 26, 2024

@hzsweers I'm 100% for a shared repo of annotations and may be other shared functionalities.

from auto-value-moshi.

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.