Skip to content

Commit bb731d8

Browse files
committed
Improve Tuple Variadic params and Tuple as Array
1 parent 9fc5176 commit bb731d8

3 files changed

Lines changed: 45 additions & 15 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "lua_actor"
3-
version = "0.2.3"
3+
version = "0.2.4"
44
license = "MIT"
55
authors = ["JunYi JohnTeee Lee <johnteee@gmail.com>"]
66
include = ["src/**/*.rs", "Cargo.toml"]

src/actor.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -396,10 +396,12 @@ fn test_actor_new() {
396396
"testlist",
397397
// Vec::<LuaMessage>::from_iter([3.into(), 2.into()]).into(),
398398
// LuaMessage::from_iter([3.into(), 2.into()]),
399-
LuaMessage::from_slice([3, 2]),
399+
// LuaMessage::from_slice([3, 2]),
400+
// LuaMessage::from((3, 2.0, "", vec![4, 5])),
401+
((3, 2.0, "", vec![4, 5]),), // <= This is an array
400402
) {
401403
Ok(_v) => {
402-
assert_eq!(Some(2), Option::from(_v));
404+
assert_eq!(Some(4), Option::from(_v));
403405
}
404406
Err(_err) => {
405407
println!("{:?}", _err);
@@ -421,7 +423,7 @@ fn test_actor_new() {
421423
// Variadic::<LuaMessage>::from_iter([6.into(), 7.into()]),
422424
// Vec::<LuaMessage>::from([6.into(), 7.into()]),
423425
// MultiLuaMessage::from_slice([6, 7]),
424-
(6, 7.0, ""),
426+
(6, 7.0, "", vec![8, 9]), // <= Variadic params
425427
) {
426428
Ok(_v) => {
427429
assert_eq!(Some(13), Option::from(_v));

src/message.rs

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub enum LuaMessage {
1717
Boolean(bool),
1818
Nil,
1919
Table(HashMap<String, LuaMessage>),
20-
Array(Vec<LuaMessage>),
20+
Array(VecDeque<LuaMessage>),
2121
Variadic(VariadicLuaMessage),
2222
}
2323

@@ -310,12 +310,12 @@ impl From<LuaMessage> for Option<HashMap<String, LuaMessage>> {
310310
}
311311
impl From<Vec<LuaMessage>> for LuaMessage {
312312
fn from(s: Vec<LuaMessage>) -> Self {
313-
LuaMessage::Array(s)
313+
LuaMessage::Array(VecDeque::from(s))
314314
}
315315
}
316316
impl FromIterator<LuaMessage> for LuaMessage {
317317
fn from_iter<I: IntoIterator<Item = LuaMessage>>(iter: I) -> Self {
318-
LuaMessage::Array(Vec::<LuaMessage>::from_iter(iter))
318+
LuaMessage::Array(VecDeque::<LuaMessage>::from_iter(iter))
319319
}
320320
}
321321
/*
@@ -341,7 +341,7 @@ impl From<LuaMessage> for Option<Vec<LuaMessage>> {
341341
}
342342
Some(new_one)
343343
}
344-
LuaMessage::Array(_h) => Some(_h),
344+
LuaMessage::Array(_h) => Some(_h.into()),
345345
LuaMessage::Variadic(_h) => Some(_h.0.into()),
346346
}
347347
}
@@ -374,7 +374,10 @@ impl<'lua> FromLua<'lua> for LuaMessage {
374374
&& t.clone().pairs::<i32, LuaMessage>().count()
375375
== t.clone().sequence_values::<LuaMessage>().count()
376376
{
377-
Ok(LuaMessage::Array(Vec::from_lua(Value::Table(t), lua)?))
377+
Ok(LuaMessage::Array(VecDeque::from(Vec::from_lua(
378+
Value::Table(t),
379+
lua,
380+
)?)))
378381
} else {
379382
Ok(LuaMessage::Table(HashMap::from_lua(Value::Table(t), lua)?))
380383
}
@@ -497,22 +500,47 @@ macro_rules! impl_tuple {
497500
MultiLuaMessage::from_iter([])
498501
}
499502
}
503+
impl Into<LuaMessage> for () {
504+
fn into(self) -> LuaMessage {
505+
LuaMessage::from_iter([])
506+
}
507+
}
500508
);
501509

502510
($last:ident $($name:ident)*) => (
503511
impl<$($name,)* $last> Into<MultiLuaMessage> for ($($name,)* $last,)
504512
where $($name: Into<LuaMessage>,)*
505513
$last: Into<MultiLuaMessage>
506514
{
507-
#[allow(unused_mut)]
508-
#[allow(unused_variables)]
509515
#[allow(non_snake_case)]
510516
fn into(self) -> MultiLuaMessage {
511517
let ($($name,)* $last,) = self;
512518

513-
let mut results = $last.into();
514-
push_reverse!(results, $($name.into(),)*);
515-
results
519+
let mut v = MultiLuaMessage::from_iter([]);
520+
let lastOne = $last.into().0;
521+
v.push_front(lastOne);
522+
push_reverse!(v, $($name.into(),)*);
523+
524+
// println!("{:?}", v);
525+
v
526+
}
527+
}
528+
impl<$($name,)* $last> From<($($name,)* $last,)> for LuaMessage
529+
where $($name: Into<LuaMessage>,)*
530+
$last: Into<LuaMessage>
531+
{
532+
#[allow(non_snake_case)]
533+
fn from(s: ($($name,)* $last,)) -> LuaMessage {
534+
let ($($name,)* $last,) = s;
535+
536+
let last_instance = $last.into();
537+
538+
let mut v = VecDeque::<LuaMessage>::from_iter([]);
539+
v.push_front(last_instance);
540+
push_reverse!(v, $($name.into(),)*);
541+
542+
// println!("{:?}", v);
543+
LuaMessage::Array(v)
516544
}
517545
}
518546
);
@@ -661,7 +689,7 @@ mod tests {
661689
)
662690
.unwrap()
663691
),
664-
discriminant(&LuaMessage::Array(t.clone()))
692+
discriminant(&LuaMessage::Array(VecDeque::from(t.clone())))
665693
);
666694

667695
// println!("{:?}\n{:?}", LuaMessage::Array(t.clone()), LuaMessage::from_lua(

0 commit comments

Comments
 (0)