MCPcopy Create free account
hub / github.com/erans/pgsqlite / encode_int8range

Method encode_int8range

src/protocol/binary.rs:498–565  ·  view source on GitHub ↗

Encode an int8range value

(range_str: &str)

Source from the content-addressed store, hash-verified

496
497 /// Encode an int8range value
498 pub fn encode_int8range(range_str: &str) -> Result<Vec<u8>, String> {
499 let trimmed = range_str.trim();
500 let mut result = Vec::new();
501
502 // Handle empty range
503 if trimmed == "empty" {
504 result.push(0x01); // RANGE_EMPTY flag
505 return Ok(result);
506 }
507
508 // Parse range format
509 if trimmed.len() < 3 {
510 return Err("Invalid range format".to_string());
511 }
512
513 let lower_inclusive = trimmed.starts_with('[');
514 let upper_inclusive = trimmed.ends_with(']');
515
516 let inner = &trimmed[1..trimmed.len()-1];
517 let parts: Vec<&str> = inner.split(',').collect();
518
519 if parts.len() != 2 {
520 return Err("Invalid range format: expected two bounds".to_string());
521 }
522
523 let lower_str = parts[0].trim();
524 let upper_str = parts[1].trim();
525
526 // Calculate flags
527 let mut flags = 0u8;
528 if lower_inclusive {
529 flags |= 0x02; // LB_INC
530 }
531 if upper_inclusive {
532 flags |= 0x04; // UB_INC
533 }
534
535 let lower_infinite = lower_str == "-infinity" || lower_str.is_empty();
536 let upper_infinite = upper_str == "infinity" || upper_str.is_empty();
537
538 if lower_infinite {
539 flags |= 0x08; // LB_INF
540 }
541 if upper_infinite {
542 flags |= 0x10; // UB_INF
543 }
544
545 result.push(flags);
546
547 // Encode bounds
548 if !lower_infinite {
549 let lower_val: i64 = lower_str.parse()
550 .map_err(|_| format!("Invalid lower bound: {lower_str}"))?;
551 let lower_bytes = lower_val.to_be_bytes();
552 result.extend_from_slice(&(lower_bytes.len() as i32).to_be_bytes());
553 result.extend_from_slice(&lower_bytes);
554 }
555

Callers

nothing calls this directly

Calls 2

lenMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected