NullableEncoding.java

package com.github.princesslana.eriscasper.data.immutable.encoding;

import com.github.princesslana.eriscasper.data.util.Nullable;
import org.immutables.encode.Encoding;
import org.immutables.encode.Encoding.StandardNaming;

@Encoding
public class NullableEncoding<T> {
  @Encoding.Impl private Nullable<T> value = Nullable.ofNull();

  @Encoding.Builder
  static class Builder<T> {
    private Nullable<T> value = Nullable.ofNull();

    @Encoding.Init
    @Encoding.Copy
    public void set(Nullable<T> value) {
      this.value = value;
    }

    @Encoding.Init
    @Encoding.Naming("null*")
    public void ofNull() {
      this.value = Nullable.ofNull();
    }

    @Encoding.Init
    @Encoding.Naming(standard = StandardNaming.INIT)
    public void ofNullable(T value) {
      this.value = Nullable.of(value);
    }

    @Encoding.Build
    public Nullable<T> build() {
      return value;
    }
  }
}