Skip to content

Commit d55d378

Browse files
committed
Update rust generator for no_std
Also re-run generator on sample.
1 parent 53c4d1d commit d55d378

File tree

3 files changed

+57
-38
lines changed

3 files changed

+57
-38
lines changed

samples/monster_generated.rs

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,38 @@
11
// automatically generated by the FlatBuffers compiler, do not modify
22

33

4+
5+
use core::mem;
6+
use core::cmp::Ordering;
7+
8+
extern crate flatbuffers;
9+
use self::flatbuffers::EndianScalar;
10+
11+
#[allow(unused_imports, dead_code)]
412
pub mod my_game {
5-
#![allow(dead_code)]
6-
#![allow(unused_imports)]
713

8-
use std::mem;
9-
use std::marker::PhantomData;
10-
use std::cmp::Ordering;
14+
use core::mem;
15+
use core::cmp::Ordering;
1116

1217
extern crate flatbuffers;
1318
use self::flatbuffers::EndianScalar;
19+
#[allow(unused_imports, dead_code)]
1420
pub mod sample {
15-
#![allow(dead_code)]
16-
#![allow(unused_imports)]
1721

18-
use std::mem;
19-
use std::marker::PhantomData;
20-
use std::cmp::Ordering;
22+
use core::mem;
23+
use core::cmp::Ordering;
2124

2225
extern crate flatbuffers;
2326
use self::flatbuffers::EndianScalar;
2427

2528
#[allow(non_camel_case_types)]
2629
#[repr(i8)]
27-
#[derive(Clone, Copy, PartialEq, Debug)]
30+
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
2831
pub enum Color {
2932
Red = 0,
3033
Green = 1,
31-
Blue = 2
34+
Blue = 2,
35+
3236
}
3337

3438
const ENUM_MIN_COLOR: i8 = 0;
@@ -80,16 +84,17 @@ const ENUM_NAMES_COLOR:[&'static str; 3] = [
8084
];
8185

8286
pub fn enum_name_color(e: Color) -> &'static str {
83-
let index: usize = e as usize;
84-
ENUM_NAMES_COLOR[index]
87+
let index = e as i8;
88+
ENUM_NAMES_COLOR[index as usize]
8589
}
8690

8791
#[allow(non_camel_case_types)]
8892
#[repr(u8)]
89-
#[derive(Clone, Copy, PartialEq, Debug)]
93+
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
9094
pub enum Equipment {
9195
NONE = 0,
92-
Weapon = 1
96+
Weapon = 1,
97+
9398
}
9499

95100
const ENUM_MIN_EQUIPMENT: u8 = 0;
@@ -139,8 +144,8 @@ const ENUM_NAMES_EQUIPMENT:[&'static str; 2] = [
139144
];
140145

141146
pub fn enum_name_equipment(e: Equipment) -> &'static str {
142-
let index: usize = e as usize;
143-
ENUM_NAMES_EQUIPMENT[index]
147+
let index = e as u8;
148+
ENUM_NAMES_EQUIPMENT[index as usize]
144149
}
145150

146151
pub struct EquipmentUnionTableOffset {}
@@ -158,7 +163,6 @@ impl<'a> flatbuffers::Follow<'a> for Vec3 {
158163
#[inline]
159164
fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
160165
<&'a Vec3>::follow(buf, loc)
161-
//flatbuffers::follow_cast_ref::<Vec3>(buf, loc)
162166
}
163167
}
164168
impl<'a> flatbuffers::Follow<'a> for &'a Vec3 {
@@ -173,7 +177,7 @@ impl<'b> flatbuffers::Push for Vec3 {
173177
#[inline]
174178
fn push(&self, dst: &mut [u8], _rest: &[u8]) {
175179
let src = unsafe {
176-
::std::slice::from_raw_parts(self as *const Vec3 as *const u8, Self::size())
180+
::core::slice::from_raw_parts(self as *const Vec3 as *const u8, Self::size())
177181
};
178182
dst.copy_from_slice(src);
179183
}
@@ -184,7 +188,7 @@ impl<'b> flatbuffers::Push for &'b Vec3 {
184188
#[inline]
185189
fn push(&self, dst: &mut [u8], _rest: &[u8]) {
186190
let src = unsafe {
187-
::std::slice::from_raw_parts(*self as *const Vec3 as *const u8, Self::size())
191+
::core::slice::from_raw_parts(*self as *const Vec3 as *const u8, Self::size())
188192
};
189193
dst.copy_from_slice(src);
190194
}
@@ -240,6 +244,7 @@ impl<'a> Monster<'a> {
240244
_fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr>,
241245
args: &'args MonsterArgs<'args>) -> flatbuffers::WIPOffset<Monster<'bldr>> {
242246
let mut builder = MonsterBuilder::new(_fbb);
247+
if let Some(x) = args.path { builder.add_path(x); }
243248
if let Some(x) = args.equipped { builder.add_equipped(x); }
244249
if let Some(x) = args.weapons { builder.add_weapons(x); }
245250
if let Some(x) = args.inventory { builder.add_inventory(x); }
@@ -261,46 +266,51 @@ impl<'a> Monster<'a> {
261266
pub const VT_WEAPONS: flatbuffers::VOffsetT = 18;
262267
pub const VT_EQUIPPED_TYPE: flatbuffers::VOffsetT = 20;
263268
pub const VT_EQUIPPED: flatbuffers::VOffsetT = 22;
269+
pub const VT_PATH: flatbuffers::VOffsetT = 24;
264270

265271
#[inline]
266-
pub fn pos(&'a self) -> Option<&'a Vec3> {
272+
pub fn pos(&self) -> Option<&'a Vec3> {
267273
self._tab.get::<Vec3>(Monster::VT_POS, None)
268274
}
269275
#[inline]
270-
pub fn mana(&'a self) -> i16 {
276+
pub fn mana(&self) -> i16 {
271277
self._tab.get::<i16>(Monster::VT_MANA, Some(150)).unwrap()
272278
}
273279
#[inline]
274-
pub fn hp(&'a self) -> i16 {
280+
pub fn hp(&self) -> i16 {
275281
self._tab.get::<i16>(Monster::VT_HP, Some(100)).unwrap()
276282
}
277283
#[inline]
278-
pub fn name(&'a self) -> Option<&'a str> {
284+
pub fn name(&self) -> Option<&'a str> {
279285
self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(Monster::VT_NAME, None)
280286
}
281287
#[inline]
282-
pub fn inventory(&'a self) -> Option<&'a [u8]> {
288+
pub fn inventory(&self) -> Option<&'a [u8]> {
283289
self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, u8>>>(Monster::VT_INVENTORY, None).map(|v| v.safe_slice())
284290
}
285291
#[inline]
286-
pub fn color(&'a self) -> Color {
292+
pub fn color(&self) -> Color {
287293
self._tab.get::<Color>(Monster::VT_COLOR, Some(Color::Blue)).unwrap()
288294
}
289295
#[inline]
290-
pub fn weapons(&'a self) -> Option<flatbuffers::Vector<flatbuffers::ForwardsUOffset<Weapon<'a>>>> {
296+
pub fn weapons(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<Weapon<'a>>>> {
291297
self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<flatbuffers::ForwardsUOffset<Weapon<'a>>>>>(Monster::VT_WEAPONS, None)
292298
}
293299
#[inline]
294-
pub fn equipped_type(&'a self) -> Equipment {
300+
pub fn equipped_type(&self) -> Equipment {
295301
self._tab.get::<Equipment>(Monster::VT_EQUIPPED_TYPE, Some(Equipment::NONE)).unwrap()
296302
}
297303
#[inline]
298-
pub fn equipped(&'a self) -> Option<flatbuffers::Table<'a>> {
304+
pub fn equipped(&self) -> Option<flatbuffers::Table<'a>> {
299305
self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Table<'a>>>(Monster::VT_EQUIPPED, None)
300306
}
301307
#[inline]
308+
pub fn path(&self) -> Option<&'a [Vec3]> {
309+
self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<Vec3>>>(Monster::VT_PATH, None).map(|v| v.safe_slice() )
310+
}
311+
#[inline]
302312
#[allow(non_snake_case)]
303-
pub fn equipped_as_weapon(&'a self) -> Option<Weapon> {
313+
pub fn equipped_as_weapon(&self) -> Option<Weapon<'a>> {
304314
if self.equipped_type() == Equipment::Weapon {
305315
self.equipped().map(|u| Weapon::init_from_table(u))
306316
} else {
@@ -320,6 +330,7 @@ pub struct MonsterArgs<'a> {
320330
pub weapons: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a , flatbuffers::ForwardsUOffset<Weapon<'a >>>>>,
321331
pub equipped_type: Equipment,
322332
pub equipped: Option<flatbuffers::WIPOffset<flatbuffers::UnionWIPOffset>>,
333+
pub path: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a , Vec3>>>,
323334
}
324335
impl<'a> Default for MonsterArgs<'a> {
325336
#[inline]
@@ -334,6 +345,7 @@ impl<'a> Default for MonsterArgs<'a> {
334345
weapons: None,
335346
equipped_type: Equipment::NONE,
336347
equipped: None,
348+
path: None,
337349
}
338350
}
339351
}
@@ -379,6 +391,10 @@ impl<'a: 'b, 'b> MonsterBuilder<'a, 'b> {
379391
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(Monster::VT_EQUIPPED, equipped);
380392
}
381393
#[inline]
394+
pub fn add_path(&mut self, path: flatbuffers::WIPOffset<flatbuffers::Vector<'b , Vec3>>) {
395+
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(Monster::VT_PATH, path);
396+
}
397+
#[inline]
382398
pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>) -> MonsterBuilder<'a, 'b> {
383399
let start = _fbb.start_table();
384400
MonsterBuilder {
@@ -431,11 +447,11 @@ impl<'a> Weapon<'a> {
431447
pub const VT_DAMAGE: flatbuffers::VOffsetT = 6;
432448

433449
#[inline]
434-
pub fn name(&'a self) -> Option<&'a str> {
450+
pub fn name(&self) -> Option<&'a str> {
435451
self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(Weapon::VT_NAME, None)
436452
}
437453
#[inline]
438-
pub fn damage(&'a self) -> i16 {
454+
pub fn damage(&self) -> i16 {
439455
self._tab.get::<i16>(Weapon::VT_DAMAGE, Some(0)).unwrap()
440456
}
441457
}

src/idl_gen_rust.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ class RustGenerator : public BaseGenerator {
256256
"yield",
257257

258258
// other rust terms we should not use
259+
"core",
259260
"std",
260261
"usize",
261262
"isize",
@@ -1477,7 +1478,7 @@ class RustGenerator : public BaseGenerator {
14771478
code_ += "";
14781479
code_ += " #[inline]";
14791480
code_ += " pub fn key_compare_with_value(&self, val: {{KEY_TYPE}}) -> "
1480-
" ::std::cmp::Ordering {";
1481+
" ::core::cmp::Ordering {";
14811482
code_ += " let key = self.{{FIELD_NAME}}();";
14821483
code_ += " key.cmp(&val)";
14831484
code_ += " }";
@@ -1648,7 +1649,7 @@ class RustGenerator : public BaseGenerator {
16481649
code_ += " #[inline]";
16491650
code_ += " fn push(&self, dst: &mut [u8], _rest: &[u8]) {";
16501651
code_ += " let src = unsafe {";
1651-
code_ += " ::std::slice::from_raw_parts("
1652+
code_ += " ::core::slice::from_raw_parts("
16521653
"self as *const {{STRUCT_NAME}} as *const u8, Self::size())";
16531654
code_ += " };";
16541655
code_ += " dst.copy_from_slice(src);";
@@ -1660,7 +1661,7 @@ class RustGenerator : public BaseGenerator {
16601661
code_ += " #[inline]";
16611662
code_ += " fn push(&self, dst: &mut [u8], _rest: &[u8]) {";
16621663
code_ += " let src = unsafe {";
1663-
code_ += " ::std::slice::from_raw_parts("
1664+
code_ += " ::core::slice::from_raw_parts("
16641665
"*self as *const {{STRUCT_NAME}} as *const u8, Self::size())";
16651666
code_ += " };";
16661667
code_ += " dst.copy_from_slice(src);";
@@ -1746,8 +1747,8 @@ class RustGenerator : public BaseGenerator {
17461747
void GenNamespaceImports(const int white_spaces) {
17471748
std::string indent = std::string(white_spaces, ' ');
17481749
code_ += "";
1749-
code_ += indent + "use std::mem;";
1750-
code_ += indent + "use std::cmp::Ordering;";
1750+
code_ += indent + "use core::mem;";
1751+
code_ += indent + "use core::cmp::Ordering;";
17511752
code_ += "";
17521753
code_ += indent + "extern crate flatbuffers;";
17531754
code_ += indent + "use self::flatbuffers::EndianScalar;";

tests/rust_usage_test/tests/integration_test.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ extern crate quickcheck;
1919

2020
extern crate flatbuffers;
2121

22+
extern crate core;
23+
2224
#[allow(dead_code, unused_imports)]
2325
#[path = "../../monster_test_generated.rs"]
2426
mod monster_test_generated;

0 commit comments

Comments
 (0)