| 95 | } |
| 96 | |
| 97 | bool IsValidUriScheme(std::string_view s) { |
| 98 | auto is_alpha = [](char c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); }; |
| 99 | auto is_scheme_char = [&](char c) { |
| 100 | return is_alpha(c) || (c >= '0' && c <= '9') || c == '+' || c == '-' || c == '.'; |
| 101 | }; |
| 102 | |
| 103 | if (s.empty()) { |
| 104 | return false; |
| 105 | } |
| 106 | if (!is_alpha(s[0])) { |
| 107 | return false; |
| 108 | } |
| 109 | return std::all_of(s.begin() + 1, s.end(), is_scheme_char); |
| 110 | } |
| 111 | |
| 112 | struct Uri::Impl { |
| 113 | Impl() { memset(&uri_, 0, sizeof(uri_)); } |