99// specific language governing permissions and limitations under the License.
1010
1111use combine:: {
12+ any,
1213 eof,
14+ look_ahead,
1315 many1,
1416 parser,
1517 satisfy,
@@ -36,10 +38,10 @@ use edn;
3638pub static HELP_COMMAND : & ' static str = & "help" ;
3739pub static OPEN_COMMAND : & ' static str = & "open" ;
3840pub static CLOSE_COMMAND : & ' static str = & "close" ;
39- pub static QUERY_COMMAND : & ' static str = & "query" ;
40- pub static ALT_QUERY_COMMAND : & ' static str = & "q" ;
41- pub static TRANSACT_COMMAND : & ' static str = & "transact" ;
42- pub static ALT_TRANSACT_COMMAND : & ' static str = & "t" ;
41+ pub static LONG_QUERY_COMMAND : & ' static str = & "query" ;
42+ pub static SHORT_QUERY_COMMAND : & ' static str = & "q" ;
43+ pub static LONG_TRANSACT_COMMAND : & ' static str = & "transact" ;
44+ pub static SHORT_TRANSACT_COMMAND : & ' static str = & "t" ;
4345
4446#[ derive( Clone , Debug , Eq , PartialEq ) ]
4547pub enum Command {
@@ -83,10 +85,10 @@ pub fn command(s: &str) -> Result<Command, cli::Error> {
8385 . with ( arguments ( ) )
8486 . map ( |args| {
8587 if args. len ( ) < 1 {
86- return Err ( cli:: ErrorKind :: CommandParse ( "Missing required argument" . to_string ( ) ) . into ( ) ) ;
88+ bail ! ( cli:: ErrorKind :: CommandParse ( "Missing required argument" . to_string( ) ) ) ;
8789 }
8890 if args. len ( ) > 1 {
89- return Err ( cli:: ErrorKind :: CommandParse ( format ! ( "Unrecognized argument {:?}" , args[ 1 ] ) ) . into ( ) ) ;
91+ bail ! ( cli:: ErrorKind :: CommandParse ( format!( "Unrecognized argument {:?}" , args[ 1 ] ) ) ) ;
9092 }
9193 Ok ( Command :: Open ( args[ 0 ] . clone ( ) ) )
9294 } ) ;
@@ -97,29 +99,26 @@ pub fn command(s: &str) -> Result<Command, cli::Error> {
9799 . skip ( eof ( ) )
98100 . map ( |args| {
99101 if args. len ( ) > 0 {
100- return Err ( cli:: ErrorKind :: CommandParse ( format ! ( "Unrecognized argument {:?}" , args[ 0 ] ) ) . into ( ) ) ;
102+ bail ! ( cli:: ErrorKind :: CommandParse ( format!( "Unrecognized argument {:?}" , args[ 0 ] ) ) ) ;
101103 }
102104 Ok ( Command :: Close )
103105 } ) ;
104-
106+
105107 let edn_arg_parser = || spaces ( )
106- . with ( try( string ( "[" ) )
107- . or ( try( string ( "{" ) ) )
108- . then ( |d| parser ( move |input| {
109- let _: & str = input;
110- Ok ( ( d. to_string ( ) + input, Consumed :: Empty ( input) ) )
111- } ) ) ) ;
112-
113- let query_parser = try( string ( QUERY_COMMAND ) ) . or ( try( string ( ALT_QUERY_COMMAND ) ) )
108+ . with ( look_ahead ( string ( "[" ) . or ( string ( "{" ) ) )
109+ . with ( many1 :: < Vec < _ > , _ > ( try( any ( ) ) ) )
110+ ) ;
111+
112+ let query_parser = try( string ( LONG_QUERY_COMMAND ) ) . or ( try( string ( SHORT_QUERY_COMMAND ) ) )
114113 . with ( edn_arg_parser ( ) )
115114 . map ( |x| {
116- Ok ( Command :: Query ( x) )
115+ Ok ( Command :: Query ( x. into_iter ( ) . collect ( ) ) )
117116 } ) ;
118117
119- let transact_parser = try( string ( TRANSACT_COMMAND ) ) . or ( try( string ( ALT_TRANSACT_COMMAND ) ) )
118+ let transact_parser = try( string ( LONG_TRANSACT_COMMAND ) ) . or ( try( string ( SHORT_TRANSACT_COMMAND ) ) )
120119 . with ( edn_arg_parser ( ) )
121120 . map ( |x| {
122- Ok ( Command :: Transact ( x) )
121+ Ok ( Command :: Transact ( x. into_iter ( ) . collect ( ) ) )
123122 } ) ;
124123
125124 spaces ( )
0 commit comments