4267a229创建于 2024年8月2日历史提交
/*
    Copyright (c) [2023] [squallzhao]
    fountain is licensed under APACHE LICENSE, VERSION 2.0.
    You can use this software according to the terms and conditions of the APACHE LICENSE, VERSION 2.0.
    You may obtain a copy of APACHE LICENSE, VERSION 2.0 at: https://www.apache.org/licenses/LICENSE-2.0
*/
package microservice.web.server
import std.collection.*

public class DefaultRouter <: IRouter{
    var map: HashMap<String, HashMap<String,IServlet> > = HashMap<String, HashMap<String,IServlet> >()

    public func find(method: String, uri: String): Option<IServlet>{
       var o: Option<HashMap<String,IServlet> > = map.get(uri)
       if (let Some(v) <- o){
          let servlet = v.get(method)
          if (let Some(s) <- servlet){
             return s;
          }
       } 
       return Option<IServlet>.None
    }

    public func get(uri: String, servlet: IServlet): Unit{
       var o: Option<HashMap<String,IServlet> > = map.get(uri)
       if (let Some(v) <- o){
          v.put("GET",servlet)
       } else{
          let v = HashMap<String,IServlet>()
          v.put("GET",servlet)
          map.put(uri,v)
       }
    }

    public func post(uri: String, servlet: IServlet): Unit{
        var o: Option<HashMap<String,IServlet> > = map.get(uri)
        if (let Some(v) <- o){
          v.put("POST",servlet)
        } else{
          let v = HashMap<String,IServlet>()
          v.put("POST",servlet)
          map.put(uri,v)
        }
    }

    public func request(uri: String, servlet: IServlet): Unit{
        var o: Option<HashMap<String,IServlet> > = map.get(uri)
        if (let Some(v) <- o){
           v.put("POST",servlet)
           v.put("GET",servlet)
        } else{
           let v = HashMap<String,IServlet>()
           v.put("POST",servlet)
           v.put("GET",servlet)
           map.put(uri,v)
        }
    }

    public func head(uri: String, servlet: IServlet): Unit{
        var o: Option<HashMap<String,IServlet> > = map.get(uri)
        if (let Some(v) <- o){
          v.put("HEAD",servlet)
        } else{
          let v = HashMap<String,IServlet>()
          v.put("HEAD",servlet)
          map.put(uri,v)
        }
    }

    public func put(uri: String, servlet: IServlet): Unit{
        var o: Option<HashMap<String,IServlet> > = map.get(uri)
        if (let Some(v) <- o){
          v.put("PUT",servlet)
        } else{
          let v = HashMap<String,IServlet>()
          v.put("PUT",servlet)
          map.put(uri,v)
        }
    }

    public func delete(uri: String, servlet: IServlet): Unit{
        var o: Option<HashMap<String,IServlet> > = map.get(uri)
        if (let Some(v) <- o){
          v.put("DELETE",servlet)
        } else{
          let v = HashMap<String,IServlet>()
          v.put("DELETE",servlet)
          map.put(uri,v)
        }
    }

    public func options(uri: String, servlet: IServlet): Unit{
        var o: Option<HashMap<String,IServlet> > = map.get(uri)
        if (let Some(v) <- o){
          v.put("OPTIONS",servlet)
        } else{
          let v = HashMap<String,IServlet>()
          v.put("OPTIONS",servlet)
          map.put(uri,v)
        }
    }

    public func all(uri: String, servlet: IServlet): Unit{
        var o: Option<HashMap<String,IServlet> > = map.get(uri)
        if (let Some(v) <- o){
           v.put("POST",servlet)
           v.put("GET",servlet)
           v.put("HEAD",servlet)
           v.put("DELETE",servlet)
           v.put("PUT",servlet)
           v.put("OPTIONS",servlet)
        } else{
           let v = HashMap<String,IServlet>()
           v.put("POST",servlet)
           v.put("GET",servlet)
           v.put("HEAD",servlet)
           v.put("DELETE",servlet)
           v.put("PUT",servlet)
           v.put("OPTIONS",servlet)
           map.put(uri,v)
        }
    }
}