2014-02-16 4 views
2

Я хотел бы закодировать ~str на base64 в Rust, чтобы реализовать базовую аутентификацию HTTP.Кодировать `~ str` до base64 в Rust

Я нашел extra::base64, но я не понимаю, как он должен использоваться. У черты ToBase64 есть реализация для &[u8], но она не найдена компилятором. Следующий тест программы:

extern mod extra; 

fn main() { 
    use extra::base64::MIME; 

    let mut config = MIME; 
    config.line_length = None; 
    let foo = ::std::os::args()[0]; 
    print(foo.as_bytes().to_base64(config)); 
} 

выдает следующее сообщение об ошибке на Rust 0.9:

rustc -o test test.rs 
test.rs:9:11: 9:44 error: type `&[u8]` does not implement any method in scope named `to_base64` 
test.rs:9  print(foo.as_bytes().to_base64(config)); 
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

Что мне не хватает?

+0

вам нужно добавить 'use extra :: base64;' – Arjan

+0

@Arjan, это не сработает. Импортирующий модуль автоматически не импортирует свои свойства. –

ответ

7

ToBase64 черта, кажется, есть реализация для & [u8], но это не найден компилятором.

Действительно, он не найден компилятором в коде, потому что вы его не импортируете. Для того, чтобы использовать реализации признака, вы должны импортировать сама черту:

extern mod extra; 

fn main() { 
    use extra::base64::{ToBase64, MIME}; 

    let mut config = MIME; 
    config.line_length = None; 
    let foo = ::std::os::args()[1]; 
    print(foo.as_bytes().to_base64(config)); 
} 

(я изменил args()[0] к args()[1], так как это более интересно для кодирования аргументов командной строки только вместо имени исполняемого файла :))

+4

Обратите внимание, что несколько дней назад 'extra :: base64' был перенесен в' serialize :: base64'. Вам придется заменить 'extra' на' serialize' в вашем коде. – barjak

+0

@barjak Как я уже сказал, я использую ржавчина 0.9. – lunaryorn

+3

уверен, но эта информация будет полезной для будущих посетителей этого сайта. – barjak

Смежные вопросы