Skip to main content

rbatis_codegen/
ops_bit_or.rs

1use crate::ops::{AsProxy, BitOr};
2use crate::ops_macros::{
3    impl_bool_scalar_binary_op, impl_bool_value_binary_op, impl_numeric_binary_op,
4    impl_same_type_binary_op,
5};
6use rbs::Value;
7
8fn op_bit_or_u64(value: &Value, other: u64) -> u64 {
9    value.u64() | other
10}
11
12fn op_bit_or_i64(value: &Value, other: i64) -> i64 {
13    value.i64() | other
14}
15
16impl_bool_value_binary_op!(BitOr, op_bitor, |);
17impl_bool_scalar_binary_op!(BitOr, op_bitor, |);
18impl_numeric_binary_op!(
19    BitOr,
20    op_bitor,
21    op_bit_or_u64,
22    op_bit_or_u64,
23    [u8, u16, u32, u64],
24    u64
25);
26impl_numeric_binary_op!(
27    BitOr,
28    op_bitor,
29    op_bit_or_i64,
30    op_bit_or_i64,
31    [i8, i16, i32, i64, isize, usize],
32    i64
33);
34impl_same_type_binary_op!(
35    BitOr,
36    op_bitor,
37    |,
38    [u8, u16, u32, u64, i8, i16, i32, i64, isize, usize, bool]
39);
40
41#[cfg(test)]
42mod test {
43    use crate::ops::BitOr;
44    use rbs::Value;
45
46    #[test]
47    fn test_bitor() {
48        assert_eq!(Value::I32(5).op_bitor(3i32), 7i64);
49        assert_eq!((&Value::I32(5)).op_bitor(&3i32), 7i64);
50        assert!(Value::Bool(false).op_bitor(&&Value::Bool(true)));
51        assert!(false.op_bitor(&true));
52    }
53}