MCPcopy Create free account
hub / github.com/bajrangCoder/acodex_server / decode

Method decode

src/lsp.rs:509–554  ·  view source on GitHub ↗
(&mut self, src: &mut BytesMut)

Source from the content-addressed store, hash-verified

507 type Error = CodecError;
508
509 fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
510 if self.remaining_bytes > src.len() {
511 return Ok(None);
512 }
513
514 match parse_message(src) {
515 Ok((remaining, message)) => {
516 let message = str::from_utf8(message)?.to_string();
517 let len = src.len() - remaining.len();
518 src.advance(len);
519 self.remaining_bytes = 0;
520 // Ignore empty frame
521 if message.is_empty() {
522 Ok(None)
523 } else {
524 Ok(Some(message))
525 }
526 }
527
528 Err(nom::Err::Incomplete(nom::Needed::Size(needed))) => {
529 self.remaining_bytes = needed.get();
530 Ok(None)
531 }
532
533 Err(nom::Err::Incomplete(nom::Needed::Unknown)) => Ok(None),
534
535 Err(nom::Err::Error(err)) | Err(nom::Err::Failure(err)) => {
536 let code = err.code;
537 let parsed_bytes = src.len() - err.input.len();
538 src.advance(parsed_bytes);
539 match find_next_message(src) {
540 Ok((_, position)) => src.advance(position),
541 Err(_) => src.advance(src.len()),
542 }
543 match code {
544 nom::error::ErrorKind::Digit | nom::error::ErrorKind::MapRes => {
545 Err(CodecError::InvalidLength)
546 }
547 nom::error::ErrorKind::Char | nom::error::ErrorKind::IsNot => {
548 Err(CodecError::InvalidType)
549 }
550 _ => Err(CodecError::MissingHeader),
551 }
552 }
553 }
554 }
555}
556
557#[inline]

Callers

nothing calls this directly

Calls 2

parse_messageFunction · 0.85
find_next_messageFunction · 0.85

Tested by

no test coverage detected