in serde-generate/runtime/cpp/binary.hpp [218:246]
inline bool is_valid_utf8(const std::string &input) {
uint8_t trailing_digits = 0;
for (uint8_t byte : input) {
if (trailing_digits == 0) {
// Start new codepoint.
if (byte >> 7 == 0) {
// ASCII character
} else if (byte >> 5 == 0b110) {
// Expecting a 2-byte codepoint
trailing_digits = 1;
} else if (byte >> 4 == 0b1110) {
// Expecting a 3-byte codepoint
trailing_digits = 2;
} else if (byte >> 3 == 0b11110) {
// Expecting a 4-byte codepoint
trailing_digits = 3;
} else {
return false;
}
} else {
// Process "trailing digit".
if (byte >> 6 != 0b10) {
return false;
}
trailing_digits -= 1;
}
}
return trailing_digits == 0;
}