in kmscng/config/protoyaml.cc [41:77]
absl::Status SetScalarField(Message* dest, const FieldDescriptor* field,
const YAML::Node& value) {
if (!value.IsScalar()) {
return YamlError("expected scalar node", value.Mark(), SOURCE_LOCATION);
}
std::string string_value = value.Scalar();
const Reflection* reflect = dest->GetReflection();
switch (field->type()) {
case FieldDescriptor::Type::TYPE_STRING:
reflect->SetString(dest, field, string_value);
return absl::OkStatus();
case FieldDescriptor::Type::TYPE_UINT32:
uint32_t int_value;
if (!absl::SimpleAtoi(string_value, &int_value)) {
return YamlError(absl::StrCat("unexpected int value: ", string_value),
value.Mark(), SOURCE_LOCATION);
}
reflect->SetUInt32(dest, field, int_value);
return absl::OkStatus();
case FieldDescriptor::Type::TYPE_BOOL:
bool bool_value;
if (!absl::SimpleAtob(string_value, &bool_value)) {
return YamlError(absl::StrCat("unexpected bool value: ", string_value),
value.Mark(), SOURCE_LOCATION);
}
reflect->SetBool(dest, field, bool_value);
return absl::OkStatus();
default:
return NewInternalError(
absl::StrCat("unsupported proto type: ", field->type_name()),
SOURCE_LOCATION);
}
}