@@ -19,6 +19,7 @@ use crate::request::validator::ValidateRequest;
1919use serde:: { Deserialize , Serialize } ;
2020use std:: collections:: HashMap ;
2121use std:: hash:: Hash ;
22+ use std:: str:: FromStr ;
2223
2324#[ derive( Debug , Serialize , Deserialize ) ]
2425pub struct OpenAPI {
@@ -39,7 +40,7 @@ impl OpenAPI {
3940 serde_yaml:: from_str ( contents)
4041 }
4142
42- pub fn validator ( & self , _ : impl ValidateRequest ) -> Result < ( ) , String > {
43+ pub fn validator ( & self , valid : impl ValidateRequest ) -> Result < ( ) , String > {
4344 if self . openapi . is_empty ( ) {
4445 return Err ( "OpenAPI version is required" . to_string ( ) ) ;
4546 }
@@ -49,6 +50,10 @@ impl OpenAPI {
4950 if self . info . version . is_empty ( ) {
5051 return Err ( "Version is required" . to_string ( ) ) ;
5152 }
53+ if self . paths . is_empty ( ) {
54+ return Err ( "Paths are required" . to_string ( ) ) ;
55+ }
56+ valid. path ( self ) . unwrap ( ) ;
5257 Ok ( ( ) )
5358 }
5459}
@@ -214,6 +219,25 @@ pub enum Method {
214219 Trace ,
215220}
216221
222+ impl FromStr for Method {
223+ type Err = String ;
224+
225+ fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
226+ match s. to_uppercase ( ) . as_str ( ) {
227+ "GET" => Ok ( Method :: Get ) ,
228+ "HEAD" => Ok ( Method :: Head ) ,
229+ "POST" => Ok ( Method :: Post ) ,
230+ "PUT" => Ok ( Method :: Put ) ,
231+ "DELETE" => Ok ( Method :: Delete ) ,
232+ "CONNECT" => Ok ( Method :: Connect ) ,
233+ "PATCH" => Ok ( Method :: Patch ) ,
234+ "OPTIONS" => Ok ( Method :: Options ) ,
235+ "TRACE" => Ok ( Method :: Trace ) ,
236+ _ => Err ( format ! ( "Invalid method: {}" , s) ) ,
237+ }
238+ }
239+ }
240+
217241#[ derive( Debug , Clone , PartialEq , Eq , Hash , Serialize , Deserialize ) ]
218242#[ serde( rename_all( deserialize = "lowercase" ) ) ]
219243pub enum In {
0 commit comments