alef 0.75.0

Opinionated polyglot binding generator for Rust libraries
Documentation
/**
 * Deserialises the JSON shape Rust's serde derives for {@code std::time::Duration}
 * ({@code {"secs": <u64>, "nanos": <u32>}}) into a millisecond count.
 *
 * <p>Annotate any {@code Long} field that represents a Rust {@code Duration} with
 * {@code @JsonDeserialize(using = DurationMillisDeserializer.class)}.
 */
@SuppressWarnings("PMD")
public class DurationMillisDeserializer extends JsonDeserializer<Long> {

    @Override
    public Long deserialize(final JsonParser parser, final DeserializationContext ctx)
            throws java.io.IOException {
        final JsonNode node = parser.getCodec().readTree(parser);
        final long secs = node.get("secs").asLong();
        final JsonNode nanosNode = node.get("nanos");
        final long nanos = nanosNode == null ? 0L : nanosNode.asLong();
        return (secs * 1000L) + (nanos / 1_000_000L);
    }
}