@neauoire @cancel here is a naive Rust implementation:
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&code=fn+decode%28data%3A+%26%5Bu8%5D%29+-%3E+String+%7B%0A++++let+mut+output+%3D+vec%21%5B%5D%3B%0A++++let+mut+iter+%3D+data.iter%28%29%3B%0A++++while+let+Some%28byte%29+%3D+iter.next%28%29+%7B%0A++++++++match+byte+%26+0x80+%7B%0A++++++++++++%2F%2F+LIT%0A++++++++++++0x00+%3D%3E+%280..%28byte+%2B+1%29%29.for_each%28%7C_%7C+output.push%28*iter.next%28%29.unwrap%28%29%29%29%2C%0A++++++++++++%2F%2F+CPY%0A++++++++++++_+%3D%3E+%7B%0A++++++++++++++++let+%28length%2C+offset%29+%3D+match+byte+%26+0x40+%7B%0A++++++++++++++++++++0x00+%3D%3E+%28%0A++++++++++++++++++++++++u16%3A%3Afrom%28byte+%26+0x3f%29+%2B+4%2C%0A++++++++++++++++++++++++usize%3A%3Afrom%28*iter.next%28%29.unwrap%28%29%29+%2B+1%2C%0A++++++++++++++++++++%29%2C%0A++++++++++++++++++++_+%3D%3E+%7B%0A++++++++++++++++++++++++let+length%3A+u16+%3D%0A++++++++++++++++++++++++++++u16%3A%3Afrom%28byte+%26+0x3f%29+%3C%3C+8+%7C+u16%3A%3Afrom%28*iter.next%28%29.unwrap%28%29%29%3B%0A++++++++++++++++++++++++%28length+%2B+4%2C+usize%3A%3Afrom%28*iter.next%28%29.unwrap%28%29%29+%2B+1%29%0A++++++++++++++++++++%7D%0A++++++++++++++++%7D%3B%0A++++++++++++++++%280..length%29.for_each%28%7C_%7C+output.push%28output%5Boutput.len%28%29+-+offset%5D%29%29%0A++++++++++++%7D%0A++++++++%7D%0A++++%7D%0A++++std%3A%3Astr%3A%3Afrom_utf8%28%26output%29.unwrap%28%29.to_string%28%29%0A%7D%0A%0Aconst+ENCODED_DATA%3A+%26%5Bu8%5D+%3D+%26%5B%0A++++40%2C+66%2C+108%2C+117%2C+101%2C+32%2C+108%2C+105%2C+107%2C+101%2C+32%2C+109%2C+121%2C+32%2C+99%2C+111%2C+114%2C+118%2C+101%2C+116%2C%0A++++116%2C+101%2C+32%2C+105%2C+116%2C+115%2C+32%2C+105%2C+110%2C+32%2C+97%2C+110%2C+100%2C+32%2C+111%2C+117%2C+116%2C+115%2C+105%2C+100%2C%0A++++101%2C+10%2C+129%2C+40%2C+35%2C+97%2C+114%2C+101%2C+32%2C+116%2C+104%2C+101%2C+32%2C+119%2C+111%2C+114%2C+100%2C+115%2C+32%2C+73%2C+32%2C%0A++++115%2C+97%2C+121%2C+10%2C+65%2C+110%2C+100%2C+32%2C+119%2C+104%2C+97%2C+116%2C+32%2C+73%2C+32%2C+116%2C+104%2C+105%2C+110%2C+107%2C%0A++++138%2C+41%2C+9%2C+102%2C+101%2C+101%2C+108%2C+105%2C+110%2C+103%2C+115%2C+10%2C+84%2C+128%2C+34%2C+6%2C+108%2C+105%2C+118%2C+101%2C+32%2C%0A++++105%2C+110%2C+128%2C+80%2C+23%2C+32%2C+109%2C+101%2C+10%2C+73%2C+39%2C+109%2C+32%2C+98%2C+108%2C+117%2C+101%2C+10%2C+68%2C+97%2C+32%2C%0A++++98%2C+97%2C+32%2C+100%2C+101%2C+101%2C+32%2C+100%2C+130%2C+9%2C+0%2C+105%2C+181%2C+18%2C%0A%5D%3B%0A%0Aconst+DECODED_DATA%3A+%26str+%3D+%22Blue+like+my+corvette+its+in+and+outside%0ABlue+are+the+words+I+say%0AAnd+what+I+think%0ABlue+are+the+feelings%0AThat+live+inside+me%0AI%27m+blue%0ADa+ba+dee+da+ba+di%0ADa+ba+dee+da+ba+di%0ADa+ba+dee+da+ba+di%0ADa+ba+dee+da+ba+di%22%3B%0A%0Afn+main%28%29+%7B%0A++++assert_eq%21%28decode%28ENCODED_DATA%29%2C+DECODED_DATA%29%3B%0A%7D%0A