Эх сурвалжийг харах

doc: Improve JSONRPC doc generation

x 7 сар өмнө
parent
commit
1d28313dfd
2 өөрчлөгдсөн 122 нэмэгдсэн , 55 устгасан
  1. 3 3
      doc/Makefile
  2. 119 52
      doc/build_jsonrpc.py

+ 3 - 3
doc/Makefile

@@ -19,10 +19,10 @@ all: $(JSONRPC)
 
 $(DARKFID_JSONRPC):
 	@echo "# darkfid JSON-RPC API" > $@
-	./build_jsonrpc.py ../bin/darkfid/src/rpc.rs >> $@
-	for i in blockchain tx; do \
+	./build_jsonrpc.py ../bin/darkfid/src/rpc/mod.rs >> $@
+	for i in blockchain stratum tx xmr; do \
 		echo "## $$i methods" >> $@ ;\
-		./build_jsonrpc.py ../bin/darkfid/src/rpc_$$i.rs >> $@ ;\
+		./build_jsonrpc.py ../bin/darkfid/src/rpc/rpc_$$i.rs >> $@ ;\
 	done
 
 clean:

+ 119 - 52
doc/build_jsonrpc.py

@@ -1,64 +1,131 @@
 #!/usr/bin/env python3
-from sys import argv
+import json
+from sys import argv, stderr
 
 
 def main(path):
-    lines = []
-
-    f = open(path, "r")
-    read_lines = f.readlines()
-    for line in read_lines:
-        lines.append(line.strip())
-
-    parsing_method = False
-
+    print(f"Opening {path}", file=stderr)
+    with open(path, "r") as f:
+        lines = [line.strip() for line in f.readlines()]
+    
     methods = []
+    parsing = False
+    parsing_request = False
+    parsing_response = False
+    
     method = ""
     comment = ""
-    send = ""
-    recv = ""
-
-    for (idx, i) in enumerate(lines):
-        if not i.startswith("//"):
+    request_lines = []
+    response_lines = []
+    start_line = 0
+    
+    for idx, line in enumerate(lines):
+        if not line.startswith("//"):
+            if parsing_response and response_lines:
+                request_json = " ".join(request_lines)
+                response_json = " ".join(response_lines)
+                
+                parsed_req = json.loads(request_json)
+                parsed_res = json.loads(response_json)
+                
+                methods.append({
+                    "method": parsed_req["method"],
+                    "comment": comment.strip(),
+                    "request": json.dumps(parsed_req, indent=2),
+                    "response": json.dumps(parsed_res, indent=2),
+                    "line": start_line
+                })
+                
+                parsing = False
+                parsing_request = False
+                parsing_response = False
+                request_lines = []
+                response_lines = []
             continue
-
-        if i == ("// RPCAPI:"):
-            parsing_method = True
+        
+        text = line[2:].strip()
+        
+        if text == "RPCAPI:":
+            if parsing_response and response_lines:
+                request_json = " ".join(request_lines)
+                response_json = " ".join(response_lines)
+                
+                parsed_req = json.loads(request_json)
+                parsed_res = json.loads(response_json)
+                
+                methods.append({
+                    "method": parsed_req["method"],
+                    "comment": comment.strip(),
+                    "request": json.dumps(parsed_req, indent=2),
+                    "response": json.dumps(parsed_res, indent=2),
+                    "line": start_line
+                })
+                
+                parsing_request = False
+                parsing_response = False
+                request_lines = []
+                response_lines = []
+            
+            parsing = True
+            start_line = idx + 1
+            comment = ""
             continue
-
-        if parsing_method:
-            if i.startswith("// --> "):
-                method = i.split()[5][1:-2]
-                recv = i[3:]
-                continue
-
-            if i.startswith("// <-- "):
-                send = i[3:]
-                parsing_method = False
-                methods.append((method, comment.strip(), recv, send, idx + 2))
-                comment = ""
-                continue
-
-            comment += i[3:] + "\n"
-
-    for i in methods:
-        print(f"* [`{i[0]}`](#{i[0].replace('.', '')})")
-
-    print("\n")
-    for i in methods:
-        print(f"### `{i[0]}`\n")
-        print(f"{i[1]}")
-        ghlink = "%s%s%s%d" % (
-            "https://codeberg.org/darkrenaissance/darkfi/src/branch/master/",
-            path.replace("../", ""),
-            "#L",
-            i[4],
-        )
-        print(f'<br><sup><a href="{ghlink}">[src]</a></sup>')
-        print("\n```json")
-        print(i[2])
-        print(i[3])
-        print("```")
+        
+        if not parsing:
+            continue
+        
+        if text.startswith("-->"):
+            parsing_request = True
+            request_lines = [text[3:].strip()]
+            continue
+        
+        if text.startswith("<--"):
+            parsing_request = False
+            parsing_response = True
+            response_lines = [text[3:].strip()]
+            continue
+        
+        if parsing_response:
+            response_lines.append(text)
+        elif parsing_request:
+            request_lines.append(text)
+        else:
+            comment += text + "\n"
+    
+    if parsing_response and response_lines:
+        request_json = " ".join(request_lines)
+        response_json = " ".join(response_lines)
+        
+        parsed_req = json.loads(request_json)
+        parsed_res = json.loads(response_json)
+        
+        methods.append({
+            "method": parsed_req["method"],
+            "comment": comment.strip(),
+            "request": json.dumps(parsed_req, indent=2),
+            "response": json.dumps(parsed_res, indent=2),
+            "line": start_line
+        })
+    
+    for m in methods:
+        anchor = m["method"].replace(".", "").replace("/", "").lower()
+        print(f"### `{m['method']}`\n")
+        
+        if m["comment"]:
+            print(f"{m['comment']}\n")
+        
+        ghlink = f"https://codeberg.org/darkrenaissance/darkfi/src/branch/master/{path.replace('../', '')}#L{m['line']}"
+        print(f'<sup><a href="{ghlink}">[source]</a></sup>\n')
+        
+        print("**Request:**\n")
+        print("```json")
+        print(m["request"])
+        print("```\n")
+        
+        print("**Response:**\n")
+        print("```json")
+        print(m["response"])
+        print("```\n")
 
 
 if __name__ == "__main__":