@@ -2,14 +2,15 @@ use anyhow::Result;
22use mlua:: { ExternalResult , IntoLua , Lua , Value } ;
33use serde:: Serialize ;
44
5- use super :: { BodyBulk , BodyCd , BodyCustom , BodyDelete , BodyHey , BodyHi , BodyHover , BodyMove , BodyRename , BodyTrash , BodyYank } ;
5+ use super :: { BodyBulk , BodyBye , BodyCd , BodyCustom , BodyDelete , BodyHey , BodyHi , BodyHover , BodyMove , BodyRename , BodyTrash , BodyYank } ;
66use crate :: Payload ;
77
88#[ derive( Debug , Serialize ) ]
99#[ serde( untagged) ]
1010pub enum Body < ' a > {
1111 Hi ( BodyHi < ' a > ) ,
1212 Hey ( BodyHey ) ,
13+ Bye ( BodyBye ) ,
1314 Cd ( BodyCd < ' a > ) ,
1415 Hover ( BodyHover < ' a > ) ,
1516 Rename ( BodyRename < ' a > ) ,
@@ -21,72 +22,78 @@ pub enum Body<'a> {
2122 Custom ( BodyCustom ) ,
2223}
2324
24- impl < ' a > Body < ' a > {
25+ impl Body < ' static > {
2526 pub fn from_str ( kind : & str , body : & str ) -> Result < Self > {
2627 Ok ( match kind {
27- "hi" => Body :: Hi ( serde_json:: from_str ( body) ?) ,
28- "hey" => Body :: Hey ( serde_json:: from_str ( body) ?) ,
29- "cd" => Body :: Cd ( serde_json:: from_str ( body) ?) ,
30- "hover" => Body :: Hover ( serde_json:: from_str ( body) ?) ,
31- "rename" => Body :: Rename ( serde_json:: from_str ( body) ?) ,
32- "bulk" => Body :: Bulk ( serde_json:: from_str ( body) ?) ,
33- "yank" => Body :: Yank ( serde_json:: from_str ( body) ?) ,
34- "move" => Body :: Move ( serde_json:: from_str ( body) ?) ,
35- "trash" => Body :: Trash ( serde_json:: from_str ( body) ?) ,
36- "delete" => Body :: Delete ( serde_json:: from_str ( body) ?) ,
28+ "hi" => Self :: Hi ( serde_json:: from_str ( body) ?) ,
29+ "hey" => Self :: Hey ( serde_json:: from_str ( body) ?) ,
30+ "bye" => Self :: Bye ( serde_json:: from_str ( body) ?) ,
31+ "cd" => Self :: Cd ( serde_json:: from_str ( body) ?) ,
32+ "hover" => Self :: Hover ( serde_json:: from_str ( body) ?) ,
33+ "rename" => Self :: Rename ( serde_json:: from_str ( body) ?) ,
34+ "bulk" => Self :: Bulk ( serde_json:: from_str ( body) ?) ,
35+ "yank" => Self :: Yank ( serde_json:: from_str ( body) ?) ,
36+ "move" => Self :: Move ( serde_json:: from_str ( body) ?) ,
37+ "trash" => Self :: Trash ( serde_json:: from_str ( body) ?) ,
38+ "delete" => Self :: Delete ( serde_json:: from_str ( body) ?) ,
3739 _ => BodyCustom :: from_str ( kind, body) ?,
3840 } )
3941 }
4042
4143 pub fn from_lua ( kind : & str , value : Value ) -> Result < Self > {
4244 Ok ( match kind {
43- "hi" | "hey" | "cd" | "hover" | "rename" | "bulk" | "yank" | "move" | "trash" | "delete" => {
44- Err ( "Cannot construct system event from Lua" ) . into_lua_err ( ) ?
45- }
45+ "hi" | "hey" | "bye" | "cd" | "hover" | "rename" | "bulk" | "yank" | "move" | "trash"
46+ | "delete" => Err ( "Cannot construct system event" ) . into_lua_err ( ) ?,
4647 _ if !kind. bytes ( ) . all ( |b| b. is_ascii_alphanumeric ( ) || b == b'-' ) => {
4748 Err ( "Kind must be alphanumeric with dashes" ) . into_lua_err ( ) ?
4849 }
4950 _ => BodyCustom :: from_lua ( kind, value) ?,
5051 } )
5152 }
5253
54+ pub fn tab ( kind : & str , body : & str ) -> usize {
55+ match kind {
56+ "cd" | "hover" | "bulk" | "rename" => { }
57+ _ => return 0 ,
58+ }
59+
60+ match Self :: from_str ( kind, body) {
61+ Ok ( Self :: Cd ( b) ) => b. tab ,
62+ Ok ( Self :: Hover ( b) ) => b. tab ,
63+ Ok ( Self :: Bulk ( b) ) => b. tab ,
64+ Ok ( Self :: Rename ( b) ) => b. tab ,
65+ _ => 0 ,
66+ }
67+ }
68+ }
69+
70+ impl < ' a > Body < ' a > {
5371 #[ inline]
5472 pub fn kind ( & self ) -> & str {
5573 match self {
5674 Self :: Hi ( _) => "hi" ,
5775 Self :: Hey ( _) => "hey" ,
76+ Self :: Bye ( _) => "bye" ,
5877 Self :: Cd ( _) => "cd" ,
5978 Self :: Hover ( _) => "hover" ,
6079 Self :: Rename ( _) => "rename" ,
6180 Self :: Bulk ( _) => "bulk" ,
6281 Self :: Yank ( _) => "yank" ,
63- Body :: Move ( _) => "move" ,
64- Body :: Trash ( _) => "trash" ,
65- Body :: Delete ( _) => "delete" ,
82+ Self :: Move ( _) => "move" ,
83+ Self :: Trash ( _) => "trash" ,
84+ Self :: Delete ( _) => "delete" ,
6685 Self :: Custom ( b) => b. kind . as_str ( ) ,
6786 }
6887 }
6988
70- pub fn tab ( kind : & str , body : & str ) -> usize {
71- match kind {
72- "cd" | "hover" | "bulk" | "rename" => { }
73- _ => return 0 ,
74- }
75-
76- match Self :: from_str ( kind, body) {
77- Ok ( Body :: Cd ( b) ) => b. tab ,
78- Ok ( Body :: Hover ( b) ) => b. tab ,
79- Ok ( Body :: Bulk ( b) ) => b. tab ,
80- Ok ( Body :: Rename ( b) ) => b. tab ,
81- _ => 0 ,
82- }
83- }
84-
8589 #[ inline]
8690 pub fn with_receiver ( self , receiver : u64 ) -> Payload < ' a > {
8791 Payload :: new ( self ) . with_receiver ( receiver)
8892 }
8993
94+ #[ inline]
95+ pub fn with_sender ( self , sender : u64 ) -> Payload < ' a > { Payload :: new ( self ) . with_sender ( sender) }
96+
9097 #[ inline]
9198 pub fn with_severity ( self , severity : u16 ) -> Payload < ' a > {
9299 Payload :: new ( self ) . with_severity ( severity)
@@ -96,17 +103,18 @@ impl<'a> Body<'a> {
96103impl IntoLua < ' _ > for Body < ' static > {
97104 fn into_lua ( self , lua : & Lua ) -> mlua:: Result < Value > {
98105 match self {
99- Body :: Hi ( b) => b. into_lua ( lua) ,
100- Body :: Hey ( b) => b. into_lua ( lua) ,
101- Body :: Cd ( b) => b. into_lua ( lua) ,
102- Body :: Hover ( b) => b. into_lua ( lua) ,
103- Body :: Rename ( b) => b. into_lua ( lua) ,
104- Body :: Bulk ( b) => b. into_lua ( lua) ,
105- Body :: Yank ( b) => b. into_lua ( lua) ,
106- Body :: Move ( b) => b. into_lua ( lua) ,
107- Body :: Trash ( b) => b. into_lua ( lua) ,
108- Body :: Delete ( b) => b. into_lua ( lua) ,
109- Body :: Custom ( b) => b. into_lua ( lua) ,
106+ Self :: Hi ( b) => b. into_lua ( lua) ,
107+ Self :: Hey ( b) => b. into_lua ( lua) ,
108+ Self :: Bye ( b) => b. into_lua ( lua) ,
109+ Self :: Cd ( b) => b. into_lua ( lua) ,
110+ Self :: Hover ( b) => b. into_lua ( lua) ,
111+ Self :: Rename ( b) => b. into_lua ( lua) ,
112+ Self :: Bulk ( b) => b. into_lua ( lua) ,
113+ Self :: Yank ( b) => b. into_lua ( lua) ,
114+ Self :: Move ( b) => b. into_lua ( lua) ,
115+ Self :: Trash ( b) => b. into_lua ( lua) ,
116+ Self :: Delete ( b) => b. into_lua ( lua) ,
117+ Self :: Custom ( b) => b. into_lua ( lua) ,
110118 }
111119 }
112120}
0 commit comments