...
This commit is contained in:
		
							
								
								
									
										20
									
								
								_archive/openrpc/generator/server/templates/method.jinja
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								_archive/openrpc/generator/server/templates/method.jinja
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
@['/:{{function_name}}'; post]
 | 
			
		||||
pub fn (mut app App) {{ function_name }}() vweb.Result{
 | 
			
		||||
    body := json2.raw_decode(app.req.data)!.as_map()
 | 
			
		||||
    {% for param_name, param_tpe in method_params.items() %}
 | 
			
		||||
    {% if rest_server_generator.lang_code_generator.is_primitive(param_type) %}
 | 
			
		||||
    {{param_name}} := body['{{param_name}}'].{{param_type}}()
 | 
			
		||||
    {% else %}
 | 
			
		||||
    {{param_name}} := json2.decode[{{param_type}}](body['{{param_name}}'].json_str()) or {
 | 
			
		||||
        app.set_status(400, 'Bad Request: ${err}')
 | 
			
		||||
        return v_server_app.text('HTTP 400: Bad Request')
 | 
			
		||||
    }
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
    res := {{function_name}}_internal({{', '.join(method_params.keys())}}) or {
 | 
			
		||||
        app.set_status(500, '')
 | 
			
		||||
        return app.text('HTTP 500: Internal Server Error')
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return app.json(res)
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
module main
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pub fn {{function_name}}({{server_generator.get_method_params(method_params)}}) !{{method_result}}{
 | 
			
		||||
    panic('to be implemented')
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								_archive/openrpc/generator/server/templates/server.jinja
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								_archive/openrpc/generator/server/templates/server.jinja
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
module main
 | 
			
		||||
 | 
			
		||||
import vweb
 | 
			
		||||
 | 
			
		||||
struct App {}
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    app := &App{}
 | 
			
		||||
    port := 8080
 | 
			
		||||
    vweb.run(app, port)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								_archive/openrpc/generator/server/vlang.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								_archive/openrpc/generator/server/vlang.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
import os
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
 | 
			
		||||
from jinja2 import Environment, FileSystemLoader
 | 
			
		||||
 | 
			
		||||
from heroserver.openrpc.model.openrpc_spec import OpenRPCSpec
 | 
			
		||||
 | 
			
		||||
script_dir = os.path.dirname(os.path.abspath(__file__))
 | 
			
		||||
env = Environment(loader=FileSystemLoader(script_dir))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ServerGenerator:
 | 
			
		||||
    def __init__(self, spec: OpenRPCSpec, dir: Path):
 | 
			
		||||
        self.spec = spec
 | 
			
		||||
        self.dir = dir
 | 
			
		||||
 | 
			
		||||
        self.server_template = env.get_template("templates/server.jinja")
 | 
			
		||||
 | 
			
		||||
    def generate(self):
 | 
			
		||||
        self.dir.mkdir(parents=True, exist_ok=True)
 | 
			
		||||
 | 
			
		||||
        self.generate_server()
 | 
			
		||||
        self.generate_models()
 | 
			
		||||
        self.generate_methods()
 | 
			
		||||
 | 
			
		||||
    def generate_server(self):
 | 
			
		||||
        code = self.server_template.render()
 | 
			
		||||
        server_file_path = self.dir.joinpath("server.v")
 | 
			
		||||
 | 
			
		||||
        with open(server_file_path, "w") as file:
 | 
			
		||||
            file.write(f"{code}")
 | 
			
		||||
 | 
			
		||||
    def generate_models():
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    def generate_methods():
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    from heroserver.openrpc.parser.parser import parser
 | 
			
		||||
 | 
			
		||||
    # from heroserver.openrpc.generator.model_generator import ModelGenerator
 | 
			
		||||
 | 
			
		||||
    data = parser(path="/root/code/git.threefold.info/hero_server/generatorexamples/mycelium_openrpc.yaml")
 | 
			
		||||
 | 
			
		||||
    spec_object = OpenRPCSpec.load(data)
 | 
			
		||||
    server_generator = ServerGenerator(spec_object, Path("/tmp/server3"))
 | 
			
		||||
    server_generator.generate()
 | 
			
		||||
		Reference in New Issue
	
	Block a user