Size: a a a

Rust — русскоговорящее сообществo

2020 December 05

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
makoven
Подсажите, чем отлиичаются rust-bindgen и cbindgen?
один генерит сишную обертку для раста, другой растовую обертку для си
источник

m

makoven in Rust — русскоговорящее сообществo
Andrey @ozkriff Lesnikóv
один генерит сишную обертку для раста, другой растовую обертку для си
Оу. Спасибо. Я думал конкуренты
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Привет!

Я пытался организовать такую "идиому"(но оказалось, что она не работает). Сделать структуру, в которой часть полей приватные, часть публичные. И предложить пользователю API создавать эту структуру в таком виде:

Foo {
 some_pub_field: value,

  ..Default::default()
}


Но оказалось, что это не работает, если в Foo есть приватные поля. Собственное приватное поле - это идентификатор(Uuid типа Copy). Я не хочу лишать пользователя возможности читать это значение, но хочу лишить возможности перезаписать его.

Может быть имеет смысл просто сделать это поле публичным, и обернуть его в структуру без Copy и Clone, и с приватным конструктором?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ilya Lakhin
Привет!

Я пытался организовать такую "идиому"(но оказалось, что она не работает). Сделать структуру, в которой часть полей приватные, часть публичные. И предложить пользователю API создавать эту структуру в таком виде:

Foo {
 some_pub_field: value,

  ..Default::default()
}


Но оказалось, что это не работает, если в Foo есть приватные поля. Собственное приватное поле - это идентификатор(Uuid типа Copy). Я не хочу лишать пользователя возможности читать это значение, но хочу лишить возможности перезаписать его.

Может быть имеет смысл просто сделать это поле публичным, и обернуть его в структуру без Copy и Clone, и с приватным конструктором?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
А для доступа к полю дай геттер, который возвращает иммутабельную ссылку
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Я бы хотел избежать builder-паттерна в данном случае
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Да и сторонних крейтов в целом
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
Ilya Lakhin
Привет!

Я пытался организовать такую "идиому"(но оказалось, что она не работает). Сделать структуру, в которой часть полей приватные, часть публичные. И предложить пользователю API создавать эту структуру в таком виде:

Foo {
 some_pub_field: value,

  ..Default::default()
}


Но оказалось, что это не работает, если в Foo есть приватные поля. Собственное приватное поле - это идентификатор(Uuid типа Copy). Я не хочу лишать пользователя возможности читать это значение, но хочу лишить возможности перезаписать его.

Может быть имеет смысл просто сделать это поле публичным, и обернуть его в структуру без Copy и Clone, и с приватным конструктором?
Последнее звучит так себе чет
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Andrey @ozkriff Lesnikóv
Последнее звучит так себе чет
Почему? Какие есть проблемы в таком подходе?
источник

Jøhn Đøꝩsøn in Rust — русскоговорящее сообществo
Ilya Lakhin
Привет!

Я пытался организовать такую "идиому"(но оказалось, что она не работает). Сделать структуру, в которой часть полей приватные, часть публичные. И предложить пользователю API создавать эту структуру в таком виде:

Foo {
 some_pub_field: value,

  ..Default::default()
}


Но оказалось, что это не работает, если в Foo есть приватные поля. Собственное приватное поле - это идентификатор(Uuid типа Copy). Я не хочу лишать пользователя возможности читать это значение, но хочу лишить возможности перезаписать его.

Может быть имеет смысл просто сделать это поле публичным, и обернуть его в структуру без Copy и Clone, и с приватным конструктором?
Напиши конструктор и геттер, делов то
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
Так это не помешает пользователю перезаписать айдишник
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
А как он его перезапишет, если обертка не Copy и не Clone? Он просто не сможет ни откуда вытащить
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
Мувнет из чего-то другого?
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Нет, она ниоткуда видна больше не будет нигде в публичном API
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Ну то есть вопрос именно в том, останется ли возможность мувнуть? Может я что-то упускаю?
источник
2020 December 06

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Roman Q
Например, при to string - в заданный, а при вызове гипотетического искомого метода - передавать кейс параметром
ну сделайте свой трейт и сериализуйте как угодно. Из коробки такого нет потому что мало кому нужно
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
а ещё если реплаить, то я буду отвечать сразу, а не когда случайно зайду в чат в 4 часа ночи
источник

ДК

Денис Котляров... in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
а ещё если реплаить, то я буду отвечать сразу, а не когда случайно зайду в чат в 4 часа ночи
а по моему ответы в 4 часа ночи самые "креативные", особенно когда требуется вставать через парочку часов :) (у самого 4msk)
источник

RP

Roman Proskuryakov in Rust — русскоговорящее сообществo
источник

R

Roman Q in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
ну сделайте свой трейт и сериализуйте как угодно. Из коробки такого нет потому что мало кому нужно
Спасибо. Я в итоге остановился на варианте со strum и одним вариантом с UPPERCASE, тк в БД строка вариантов этого енама представлена именно так
источник