Ref: https://wicg.github.io/urlpattern/#add-a-part
(
&mut self,
prefix: &str,
name_token: Option<Token>,
regexp_or_wildcard_token: Option<Token>,
suffix: &str,
modifier_token: Option<Token>,
)
| 246 | |
| 247 | // Ref: https://wicg.github.io/urlpattern/#add-a-part |
| 248 | fn add_part( |
| 249 | &mut self, |
| 250 | prefix: &str, |
| 251 | name_token: Option<Token>, |
| 252 | regexp_or_wildcard_token: Option<Token>, |
| 253 | suffix: &str, |
| 254 | modifier_token: Option<Token>, |
| 255 | ) -> Result<(), Error> { |
| 256 | let mut modifier = PartModifier::None; |
| 257 | if let Some(modifier_token) = modifier_token { |
| 258 | modifier = match modifier_token.value { |
| 259 | "?" => PartModifier::Optional, |
| 260 | "*" => PartModifier::ZeroOrMore, |
| 261 | "+" => PartModifier::OneOrMore, |
| 262 | _ => unreachable!(), |
| 263 | }; |
| 264 | } |
| 265 | if name_token.is_none() |
| 266 | && regexp_or_wildcard_token.is_none() |
| 267 | && modifier == PartModifier::None |
| 268 | { |
| 269 | self.pending_fixed_value.push_str(prefix); |
| 270 | return Ok(()); |
| 271 | } |
| 272 | self.maybe_add_part_from_pending_fixed_value()?; |
| 273 | if name_token.is_none() && regexp_or_wildcard_token.is_none() { |
| 274 | assert!(suffix.is_empty()); |
| 275 | if prefix.is_empty() { |
| 276 | return Ok(()); |
| 277 | } |
| 278 | let encoded_value = (self.encoding_callback)(prefix)?; |
| 279 | self.part_list.push(Part::new( |
| 280 | PartType::FixedText, |
| 281 | encoded_value, |
| 282 | modifier, |
| 283 | )); |
| 284 | return Ok(()); |
| 285 | } |
| 286 | |
| 287 | let mut regexp_value = match ®exp_or_wildcard_token { |
| 288 | None => self.segment_wildcard_regexp.to_owned(), |
| 289 | Some(regexp_or_wildcard_token) => { |
| 290 | if regexp_or_wildcard_token.kind == TokenType::Asterisk { |
| 291 | FULL_WILDCARD_REGEXP_VALUE.to_string() |
| 292 | } else { |
| 293 | regexp_or_wildcard_token.value.to_owned() |
| 294 | } |
| 295 | } |
| 296 | }; |
| 297 | |
| 298 | let mut kind = PartType::Regexp; |
| 299 | if regexp_value == self.segment_wildcard_regexp { |
| 300 | kind = PartType::SegmentWildcard; |
| 301 | regexp_value = String::new(); |
| 302 | } else if regexp_value == FULL_WILDCARD_REGEXP_VALUE { |
| 303 | kind = PartType::FullWildcard; |
| 304 | regexp_value = String::new(); |
| 305 | } |
no test coverage detected