@Override
  public <Source> void encodeField(
      EntityFieldEncoder<Value, Source> field, Context path, Source value) {
    // TODO: implement infrastructure to make encoders aware of field annotations to avoid the
    // runtime and complexity penalty of checking them here.

    final Flags flags = field.getFlags();

    if (flags.getFlag(DatastoreFlags.KeyFlag.class).findFirst().isPresent()) {
      field.encodeOptionally(
          path.push(field.getName()),
          value,
          target -> {
            object.setKey(target.getKeyValue());
          });
    } else {
      field.encodeOptionally(
          path.push(field.getName()),
          value,
          target -> {
            object.getMutableProperties().put(field.getName(), target);
          });
    }
  }