aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorGravatar jesopo2018-10-08 12:43:47 +0100
committerGravatar jesopo2018-10-08 12:43:47 +0100
commit0b975b72de3a6ab4b8c76e97eac6ba7f8a05b3e5 (patch)
tree8e10014b630b3990a43b60b4af83517fab10a04c /modules
parentSupport post_data in utils.http.get_url (diff)
signature
Add !rust in modules/rust_eval.py
Diffstat (limited to 'modules')
-rw-r--r--modules/rust_eval.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/modules/rust_eval.py b/modules/rust_eval.py
new file mode 100644
index 00000000..a1615c66
--- /dev/null
+++ b/modules/rust_eval.py
@@ -0,0 +1,40 @@
+import json, socket
+from src import ModuleManager, utils
+
+EVAL_URL = "https://play.rust-lang.org/execute"
+FN_TEMPLATE = """
+fn main() {
+ println!(\"{:?}\", {
+ %s
+ });
+}
+"""
+
+class Module(ModuleManager.BaseModule):
+ _name = "Rust"
+ @utils.hook("received.command.rust", min_args=1)
+ def eval(self, event):
+ """
+ :help: Evaluate a rust statement
+ :usage: <statement>
+ """
+ try:
+ page = utils.http.get_url(EVAL_URL, post_data=json.dumps({
+ "code": FN_TEMPLATE % event["args"],
+ "channel": "nightly",
+ "crateType": "bin",
+ "mode": "debug",
+ "tests": False,
+ "execute": True,
+ "target": "ast",
+ "backtrace": False
+ }), method="POST", json=True)
+ except socket.timeout:
+ event["stderr"].write("%s: eval timed out" %
+ event["user"].nickname)
+ return
+
+ if page["success"]:
+ event["stdout"].write(page["stdout"])
+ else:
+ event["stderr"].write(page["stderr"])