MoshiX

Extensions for Moshi including IR plugins, moshi-sealed, and more.

APACHE-2.0 License

Stars
490

Bot releases are hidden (Show)

MoshiX -

Published by ZacSweers over 3 years ago

Project-wide

  • Update Kotlin to 1.5.0.
  • Update deprecated Kotlin stdlib usages during 1.5.0 upgrade.
  • Support Java 16.
  • Update KotlinPoet to 1.8.0.
  • Small documentation improvements.

All KSP artifacts

  • Update KSP to 1.5.0-1.0.0-alpha10.
  • Switch to new SymbolProcessorProvider APIs.
  • Adopt new Sequence-based KSP APIs where possible.

All metadata-reflect artifacts

  • Update kotlinx-metadata to 0.3.0.

moshi-ksp

  • Fix: Don't fail on annotations that are typealias'd.
  • Fix: Support enum entry values in copied @JsonQualifier annotations.
  • Fix: Support array values in copied @JsonQualifier annotations.

moshi-sealed

  • Enhancement: sealed interfaces and package-wide sealed classes are fully supported in KSP, kapt, reflect, and metadata-reflect.
  • Fix: Make moshi-adapters an api dependency in moshi-sealed-runtime

moshi-records-reflect

  • RecordsJsonAdapterFactory is no longer in preview and now built against JDK 16.
  • New: A dedicated README page can be found here.
final record Message(String value) {
}

public static void main(String[] args) {
  Moshi moshi = new Moshi.Builder()
    .add(new RecordsJsonAdapterFactory())
    .build();
  
  JsonAdapter<Message> messageAdapter = moshi.adapter(Message.class);
}

moshi-sealed: java-sealed-reflect

  • JavaSealedJsonAdapterFactory is now built against JDK 16. Note this feature is still in preview.
  • New: A dedicated README section can be found here.

Thanks to the following contributors for contributing to this release! @remcomokveld, @martinbonnin, and @eneim

MoshiX -

Published by ZacSweers over 3 years ago

KSP

  • Update KSP to 1.4.30-1.0.0-alpha04 in KSP-using libraries. Among other changes, these processors now run all
    errors through KSP's native KspLogger.error() API now.

moshi-ksp

  • Fix: Support function types as property types.
  • Fix: Support generic arrays when invoking defaults constructors.
  • Some small readability improvements to generated code.

Moshi-sealed

  • Add tests for Kotlin 1.4.30's preview support for sealed interfaces. These won't be officially supported until
    Kotlin 1.5, but they do appear to Just Work™️ since Kotlin reuses the same sealed APIs under the hood.
  • Support Kotlin 1.5's upcoming sealed interfaces in KSP.
MoshiX -

Published by ZacSweers over 3 years ago

  • New: Experimental support for Java record classes via new moshi-records-reflect artifact. See
    RecordsJsonAdapterFactory. Requires JDK 15 + --enable-preview.

    Moshi moshi = new Moshi.Builder()
        .add(new RecordsJsonAdapterFactory())
        .build();
    
    final record Message(String value) {
    }
    
  • New: Experimental support for Java sealed classes and interfaces in moshi-sealed via new
    moshi-sealed-java-sealed-reflect artifact. See JavaSealedJsonAdapterFactory. Requires JDK 15 + --enable-preview.

    Moshi moshi = new Moshi.Builder()
        .add(new JavaSealedJsonAdapterFactory())
        .add(new RecordsJsonAdapterFactory())
        .build();
    
    @JsonClass(generateAdapter = true, generator = "sealed:type")
    sealed interface MessageInterface
        permits MessageInterface.Success, MessageInterface.Error {
    
      @TypeLabel(label = "success", alternateLabels = {"successful"})
      final record Success(String value) implements MessageInterface {
      }
      
      @TypeLabel(label = "error")
      final record Error(Map<String, Object> error_logs) implements MessageInterface {
      }
    }
    
  • New: @AdaptedBy annotation support in moshi-adapters. This is analogous to Gson's @JsonAdapter annotation,
    allowing you to annotate a class or a property with it to indicate which JsonAdapter or JsonAdapter.Factory
    should be used to encode it.

 val moshi = Moshi.Builder()
   .add(AdaptedBy.Factory())
   .build()
 
 @AdaptedBy(StringAliasAdapter::class)
 data class StringAlias(val value: String)
 
 class StringAliasAdapter : JsonAdapter<StringAlias>() {
   override fun fromJson(reader: JsonReader): StringAlias? {
     return StringAlias(reader.nextString())
   }
 
   override fun toJson(writer: JsonWriter, value: StringAlias?) {
     if (value == null) {
       writer.nullValue()
       return
     }
     writer.value(value.value)
   }
 }
MoshiX -

Published by ZacSweers almost 4 years ago

  • Update to KSP 1.4.20-dev-experimental-20210111.
Package Rankings
Top 15.43% on Repo1.maven.org