* Copyright 2018 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
extern crate flatbuffers;
#[allow(dead_code, unused_imports)]
#[allow(clippy::all)]
mod rust_generated;
pub use rust_generated::my_game::sample::{
Color, Equipment, Monster, MonsterArgs, Vec3, Weapon, WeaponArgs,
};
#[allow(clippy::float_cmp)]
fn main() {
let mut builder = flatbuffers::FlatBufferBuilder::with_capacity(1024);
let weapon_one_name = builder.create_string("Sword");
let weapon_two_name = builder.create_string("Axe");
let sword =
Weapon::create(&mut builder, &WeaponArgs { name: Some(weapon_one_name), damage: 3 });
let axe = Weapon::create(&mut builder, &WeaponArgs { name: Some(weapon_two_name), damage: 5 });
let name = builder.create_string("Orc");
let inventory = builder.create_vector(&[0u8, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
let weapons = builder.create_vector(&[sword, axe]);
let orc = Monster::create(
&mut builder,
&MonsterArgs {
pos: Some(&Vec3::new(1.0f32, 2.0f32, 3.0f32)),
mana: 150,
hp: 80,
name: Some(name),
inventory: Some(inventory),
color: Color::Red,
weapons: Some(weapons),
equipped_type: Equipment::Weapon,
equipped: Some(axe.as_union_value()),
..Default::default()
},
);
builder.finish(orc, None);
let buf = builder.finished_data();
let monster = flatbuffers::root::<Monster>(buf).unwrap();
let hp = monster.hp();
let mana = monster.mana();
let name = monster.name();
assert_eq!(hp, 80);
assert_eq!(mana, 150);
assert_eq!(name, Some("Orc"));
assert!(monster.pos().is_some());
let pos = monster.pos().unwrap();
let x = pos.x();
let y = pos.y();
let z = pos.z();
assert_eq!(x, 1.0f32);
assert_eq!(y, 2.0f32);
assert_eq!(z, 3.0f32);
assert!(monster.inventory().is_some());
let inv = monster.inventory().unwrap();
let third_item = inv.get(2);
assert_eq!(third_item, 2);
assert!(monster.weapons().is_some());
let weps = monster.weapons().unwrap();
let wep2 = weps.get(1);
let second_weapon_name = wep2.name();
let second_weapon_damage = wep2.damage();
assert_eq!(second_weapon_name, Some("Axe"));
assert_eq!(second_weapon_damage, 5);
assert_eq!(monster.equipped_type(), Equipment::Weapon);
let equipped = monster.equipped_as_weapon().unwrap();
let weapon_name = equipped.name();
let weapon_damage = equipped.damage();
assert_eq!(weapon_name, Some("Axe"));
assert_eq!(weapon_damage, 5);
println!("The FlatBuffer was successfully created and accessed!");
dbg!(monster);
}
#[cfg(test)]
#[test]
fn test_main() {
main()
}