| 132 | } |
| 133 | |
| 134 | size_t GetSchemePrefixSize(const TStringBuf url) noexcept { |
| 135 | if (url.empty()) { |
| 136 | return 0; |
| 137 | } |
| 138 | |
| 139 | struct TDelim: public str_spn { |
| 140 | inline TDelim() |
| 141 | : str_spn("!-/:-@[-`{|}", true) |
| 142 | { |
| 143 | } |
| 144 | }; |
| 145 | |
| 146 | const auto& delim = *Singleton<TDelim>(); |
| 147 | const char* n = delim.brk(url.data(), url.end()); |
| 148 | |
| 149 | if (n + 2 >= url.end() || *n != ':' || n[1] != '/' || n[2] != '/') { |
| 150 | return 0; |
| 151 | } |
| 152 | |
| 153 | return n + 3 - url.begin(); |
| 154 | } |
| 155 | |
| 156 | TStringBuf GetSchemePrefix(const TStringBuf url Y_LIFETIME_BOUND) noexcept { |
| 157 | return url.Head(GetSchemePrefixSize(url)); |
no test coverage detected