package com.codepoetics.octarine.records;
public interface ValidRecordKey<T> extends Key<Valid<T>> {
static <T> ValidRecordKey<T> named(String name, Schema<T> schema, Value...metadata) {
return named(name, schema, Record.of(metadata));
}
static <T> ValidRecordKey<T> named(String name, Schema<T> schema, Record metadata) {
return new Impl<T>(name, schema, metadata);
}
static final class Impl<T> extends BaseKey<Valid<T>> implements ValidRecordKey<T> {
private final Schema<T> schema;
Impl(String name, Schema<T> schema, Record metadata) {
super(name, metadata);
this.schema = schema;
}
@Override
public Schema<T> schema() {
return schema;
}
@Override
public Value of(Value...values) {
return of(schema.validate(values).get());
}
}
Schema<T> schema();
Value of(Value... values);
}