Size: a a a

2020 October 16

АГ

Алексей Герасимов... in Rust Beginners
массивы фиксированной длины - это боль
источник

DT

Dmitry Terekhov in Rust Beginners
Kitsu
let x: &[f32; 3] = &*(e[0].as_ptr() as *const [f32; 3]);
impl ops::Index<usize> for Transform4D {
   type Output = Vec3;

   fn index(&self, i: usize) -> &Self::Output {
       unsafe { &*(self.e[0].as_ptr() as *const Vec3) }
   }
}
источник

DT

Dmitry Terekhov in Rust Beginners
Выглядит опасненько.
источник

DT

Dmitry Terekhov in Rust Beginners
Если Vec3 Copy, то проблем не должно быть, наверное)
источник

K

Kitsu in Rust Beginners
Dmitry Terekhov
Выглядит опасненько.
и странненько, зачем там не используемый индекс?
источник

DT

Dmitry Terekhov in Rust Beginners
Kitsu
и странненько, зачем там не используемый индекс?
Очепятка. Спасибо за помощь. До такого в расте ещё не дошел.
источник

11

123 123 in Rust Beginners
Нужно какие-то дополнительные телодвижения делать что бы скастить thiserror к anyhow::Error? Есть функция1 -> Result<(), anyhow::Error>. Есть  функция2 -> Result<i32, MyError>.  Функция2 исполняется внутри функции1. MyError - перечисление с использованием #[derive(Error)]. Компилятор жалуется на то, то std::error::Error не имплементирован для моей ошибки. Мне нужно для каждого поля внутри enum MyError имплементировать std::error::Error?
источник

K

Kitsu in Rust Beginners
Dmitry Terekhov
Очепятка. Спасибо за помощь. До такого в расте ещё не дошел.
но вообще реализация трейта не интуитивная
источник

K

Kitsu in Rust Beginners
123 123
Нужно какие-то дополнительные телодвижения делать что бы скастить thiserror к anyhow::Error? Есть функция1 -> Result<(), anyhow::Error>. Есть  функция2 -> Result<i32, MyError>.  Функция2 исполняется внутри функции1. MyError - перечисление с использованием #[derive(Error)]. Компилятор жалуется на то, то std::error::Error не имплементирован для моей ошибки. Мне нужно для каждого поля внутри enum MyError имплементировать std::error::Error?
thiserror и так имплементит StdError
источник

11

123 123 in Rust Beginners
Kitsu
thiserror и так имплементит StdError
я из этой предпосылки и исходил, смотрел доки. Ошибку исправил, косяк был в том что у меня два типа ошибок с похожими названиями :)
источник

SU

Solomon Ukezu in Rust Beginners
so putting sad faces won't help
источник

Э

Эрик in Rust Beginners
Dmitry Terekhov
impl ops::Index<usize> for Transform4D {
   type Output = Vec3;

   fn index(&self, i: usize) -> &Self::Output {
       unsafe { &*(self.e[0].as_ptr() as *const Vec3) }
   }
}
repr(C) есть? Если нет, то может стать грустно.
источник

AB

Andrew Borzilo in Rust Beginners
можете посоветовать крейт типа sdl2_rs чтобы на windows/linux без геморроя создать окошко со стандартными ивентами и рисовать бекграунд из Vec<RGB>, а поверх него простой текст?
источник

K

Kitsu in Rust Beginners
Andrew Borzilo
можете посоветовать крейт типа sdl2_rs чтобы на windows/linux без геморроя создать окошко со стандартными ивентами и рисовать бекграунд из Vec<RGB>, а поверх него простой текст?
а чем sdl2 не устраивает? слишком низкоуровневый или что?
источник

AB

Andrew Borzilo in Rust Beginners
в sdl2 текст без геморроя нельзя :(
источник

K

Kitsu in Rust Beginners
Andrew Borzilo
в sdl2 текст без геморроя нельзя :(
источник

M

Michael in Rust Beginners
Привет! Кто-нибудь знает как подружить
#[actix_web::main] и reqwest::blocking::Client ?

Есть мой код, он с актиксом:

#[actix_web::main]
async fn main() -> std::io::Result<()> {
///
  let credentials = credentials::Credentials::from_file(config.credentials_path.as_str())
       .expect("Read credentials file");

///
}


Есть код библиотеки работает с Google API с помощью reqwest::blocking::Client

    pub fn from_file(credential_file: &str) -> Result<Self, Error> {
       let mut f = File::open(credential_file)?;
       let mut buffer = Vec::new();
       f.read_to_end(&mut buffer)?;
       let mut credentials: Credentials = serde_json::from_slice(buffer.as_slice())?;
       credentials.compute_secret()?;
       credentials.download_google_jwks()?;
       Ok(credentials)
   }
//// .....

/// Download the Google JWK Set for a given service account.
/// The resulting set of JWKs need to be added to a credentials object
/// for jwk verifications.
pub fn download_google_jwks(account_mail: &str) -> Result<JWKSetDTO, Error> {
   let resp = reqwest::blocking::Client::new()
       .get(&format!(
           "https://www.googleapis.com/service_accounts/v1/jwk/{}",
           account_mail
       ))
       .send()?;
   let jwk_set: JWKSetDTO = resp.json()?;
   Ok(jwk_set)
}

Получаю панику:

thread 'main' panicked at 'Cannot drop a runtime in a context where blocking is not allowed. This happens when a runtime is dropped from within an asynchronous context.',
источник

K

Kitsu in Rust Beginners
Michael
Привет! Кто-нибудь знает как подружить
#[actix_web::main] и reqwest::blocking::Client ?

Есть мой код, он с актиксом:

#[actix_web::main]
async fn main() -> std::io::Result<()> {
///
  let credentials = credentials::Credentials::from_file(config.credentials_path.as_str())
       .expect("Read credentials file");

///
}


Есть код библиотеки работает с Google API с помощью reqwest::blocking::Client

    pub fn from_file(credential_file: &str) -> Result<Self, Error> {
       let mut f = File::open(credential_file)?;
       let mut buffer = Vec::new();
       f.read_to_end(&mut buffer)?;
       let mut credentials: Credentials = serde_json::from_slice(buffer.as_slice())?;
       credentials.compute_secret()?;
       credentials.download_google_jwks()?;
       Ok(credentials)
   }
//// .....

/// Download the Google JWK Set for a given service account.
/// The resulting set of JWKs need to be added to a credentials object
/// for jwk verifications.
pub fn download_google_jwks(account_mail: &str) -> Result<JWKSetDTO, Error> {
   let resp = reqwest::blocking::Client::new()
       .get(&format!(
           "https://www.googleapis.com/service_accounts/v1/jwk/{}",
           account_mail
       ))
       .send()?;
   let jwk_set: JWKSetDTO = resp.json()?;
   Ok(jwk_set)
}

Получаю панику:

thread 'main' panicked at 'Cannot drop a runtime in a context where blocking is not allowed. This happens when a runtime is dropped from within an asynchronous context.',
А зачем тебе блокирующее i/o внутри асинка?
источник

M

Michael in Rust Beginners
Kitsu
А зачем тебе блокирующее i/o внутри асинка?
кобыла не моя :(
блокирующий i/o в библиотеке
источник

M

Michael in Rust Beginners
если никак, то придется форкать и делать поддержку асинка
источник