Size: a a a

У нас тут секта криптоанархистов

2021 February 20

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
#[derive (Debug)]
enum Container {
 I8 (i8),
 U8 (u8),
 I16 (i16),
 U16 (u16),
 I32 (i32),
 U32 (u32),
 I64 (i64),
 U64 (u64),
 Varchar (String)
}

#[derive (Copy, Clone, PartialEq, Debug)]
enum Datatype {
 I8,
 U8,
 I16,
 U16,
 U32,
 I32,
 I64,
 U64,
 Varchar { size: u16 }
}
вот условно два энама, которые постепенно начинают ебать мозгу

и проблема в том, что при условной десериализации строки из таблицы мне на ум не приходит ничего умнее чем
Datatype::I8 => Container::I8(i8::from_le_bytes(get_c(data, &mut cursor, 1)?.try_into().unwrap())),
Datatype::U8 => Container::U8(u8::from_le_bytes(get_c(data, &mut cursor, 1)?.try_into().unwrap())),
Datatype::I16 => Container::I16(i16::from_le_bytes(get_c(data, &mut cursor, 2)?.try_into().unwrap())),
Datatype::U16 => Container::U16(u16::from_le_bytes(get_c(data, &mut cursor, 2)?.try_into().unwrap())),
Datatype::I32 => Container::I32(i32::from_le_bytes(get_c(data, &mut cursor, 4)?.try_into().unwrap())),
Datatype::U32 => Container::U32(u32::from_le_bytes(get_c(data, &mut cursor, 4)?.try_into().unwrap())),
Datatype::I64 => Container::I64(i64::from_le_bytes(get_c(data, &mut cursor, 8)?.try_into().unwrap())),
Datatype::U64 => Container::U64(u64::from_le_bytes(get_c(data, &mut cursor, 8)?.try_into().unwrap())),
Datatype::Varchar {size} => {

и так далее и тому подобное
get_c чисто рандомно, потом что нибудь придумаю
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
а теперь мне еще надо получать номер типа данных чтобы как-то хранить информацию о таблице
и с моими хуевыми познаниями я не могу ничего выдумать, кроме как
#[derive (Copy, Clone, Debug)]
#[repr(u8)]
enum TagDatatype {
 I8 = 0,
 U8,
 I16,
 U16,
 U32,
 I32,
 I64,
 U64,
 Varchar
}

fn type_to_u8(t: Datatype) -> u8 {
 match t {
   Datatype::I8 => TagDatatype::I8 as u8,
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
хотя, можно, конечно, с помощью условного strum итерироваться по дататайпу, но чета все равно рукожопо
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
так
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
пока нахуй выкину большинство типов, чтобы мозг не ебали и напишу каркас без них
источник

R

R in У нас тут секта криптоанархистов
Выкидывай всё
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
fn serialize_container(c: Container, bound: Datatype) -> Result<Vec<u8>, DBMSErrors> {

   if Tag::from(&c) != Tag::from(&bound) {
       return Err(DBMSErrors::BoundNotMatchesWithContainer)
   };

   let mut data = match c {
       Container::I16 (x) => x.to_le_bytes().to_vec(),
       Container::U16 (x) => x.to_le_bytes().to_vec(),
       Container::I32 (x) => x.to_le_bytes().to_vec(),
       Container::U32 (x) => x.to_le_bytes().to_vec(),
       Container::Real (x) => x.to_le_bytes().to_vec(),
       Container::Varchar (x) => x.as_bytes().to_vec(),
   };

   if data.len() > Datatype::size(bound) {
       return Err(DBMSErrors::SizeOfContainedValueIsTooBig)
   } else if data.len() < Datatype::size(bound) {
       data.extend(std::iter::repeat(0u8).take(Datatype::size(bound) - data.len()))
   }

   Ok(data)
}

все равно как-то громоздко, но постепенно становится лучше
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
бля а как заставить итератор законсьюмить вектор
источник

MT

Munir Tagarifullin in У нас тут секта криптоанархистов
Попробуй поугрожать ему ножом
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
into_iter()
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
кайф
источник

R

R in У нас тут секта криптоанархистов
Попробуйте Python
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
R
Попробуйте Python
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
мне и так в жизни питона по горло
источник

S[

Seer Iλya [Vennik E1... in У нас тут секта криптоанархистов
ʰᵉˡˡᵒᵈᵒᵍᵉ
fn serialize_container(c: Container, bound: Datatype) -> Result<Vec<u8>, DBMSErrors> {

   if Tag::from(&c) != Tag::from(&bound) {
       return Err(DBMSErrors::BoundNotMatchesWithContainer)
   };

   let mut data = match c {
       Container::I16 (x) => x.to_le_bytes().to_vec(),
       Container::U16 (x) => x.to_le_bytes().to_vec(),
       Container::I32 (x) => x.to_le_bytes().to_vec(),
       Container::U32 (x) => x.to_le_bytes().to_vec(),
       Container::Real (x) => x.to_le_bytes().to_vec(),
       Container::Varchar (x) => x.as_bytes().to_vec(),
   };

   if data.len() > Datatype::size(bound) {
       return Err(DBMSErrors::SizeOfContainedValueIsTooBig)
   } else if data.len() < Datatype::size(bound) {
       data.extend(std::iter::repeat(0u8).take(Datatype::size(bound) - data.len()))
   }

   Ok(data)
}

все равно как-то громоздко, но постепенно становится лучше
а зачем так сложно
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
Seer Iλya [Vennik E10]
а зачем так сложно
пока до меня не доходит как проще не тыкая extern крэйты
источник

S[

Seer Iλya [Vennik E1... in У нас тут секта криптоанархистов
а зачем тебе без экстерн крейтов
источник

S[

Seer Iλya [Vennik E1... in У нас тут секта криптоанархистов
ты софт пишешь или дрочишь в присядку
источник

ʰ

ʰᵉˡˡᵒᵈᵒᵍᵉ... in У нас тут секта криптоанархистов
Seer Iλya [Vennik E10]
а зачем тебе без экстерн крейтов
хорошо, а что сюда хорошо подходит?
да и вот ну хочу я стопроцентно знать как у меня эта инфа сериализуется, чтобы формат не зависел от чужих рук
источник

S[

Seer Iλya [Vennik E1... in У нас тут секта криптоанархистов
что значит "не зависел от чужих рук"?
источник