MCPcopy Create free account
hub / github.com/denoland/rust-urlpattern / add_part

Method add_part

src/parser.rs:248–329  ·  view source on GitHub ↗

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>,
  )

Source from the content-addressed store, hash-verified

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 &regexp_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 }

Callers 1

parse_pattern_stringFunction · 0.80

Tested by

no test coverage detected