From d6960865d6295b1c97869a79662add391fac10cd Mon Sep 17 00:00:00 2001 From: jesopo Date: Mon, 16 Sep 2019 12:02:03 +0100 Subject: eval_rust.py -> rust.py --- modules/rust.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 modules/rust.py (limited to 'modules/rust.py') diff --git a/modules/rust.py b/modules/rust.py new file mode 100644 index 00000000..f432e1c0 --- /dev/null +++ b/modules/rust.py @@ -0,0 +1,42 @@ +#--depends-on commands + +import json, socket +from src import ModuleManager, utils + +EVAL_URL = "https://play.rust-lang.org/execute" +FN_TEMPLATE = """ +fn main() { + println!("{:?}", { + %s + }); +} +""" +API_ARGS = { + "channel": "nightly", + "crateType": "bin", + "mode": "debug", + "tests": False, + "execute": True, + "target": "ast", + "backtrace": False +} + +class Module(ModuleManager.BaseModule): + @utils.hook("received.command.rust", min_args=1) + def eval(self, event): + """ + :help: Evaluate a rust statement + :usage: + """ + args = API_ARGS.copy() + args["code"] = FN_TEMPLATE % event["args"] + try: + page = utils.http.request(EVAL_URL, post_data=args, + method="POST", json=True, content_type="application/json") + except socket.timeout: + raise utils.EventError("%s: eval timed out" % + event["user"].nickname) + + err_or_out = "stdout" if page.data["success"] else "stderr" + event[err_or_out].write("%s: %s" % (event["user"].nickname, + page.data[err_or_out].strip("\n"))) -- cgit v1.3.1-10-gc9f91