rust/hgcli/src/main.rs
changeset 44638 af739894a4c1
child 44729 26ce8e751503
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hgcli/src/main.rs	Tue Mar 31 19:07:36 2020 -0700
@@ -0,0 +1,38 @@
+use pyembed::MainPythonInterpreter;
+
+// Include an auto-generated file containing the default
+// `pyembed::PythonConfig` derived by the PyOxidizer configuration file.
+//
+// If you do not want to use PyOxidizer to generate this file, simply
+// remove this line and instantiate your own instance of
+// `pyembed::PythonConfig`.
+include!(env!("PYOXIDIZER_DEFAULT_PYTHON_CONFIG_RS"));
+
+fn main() {
+    // The following code is in a block so the MainPythonInterpreter is destroyed in an
+    // orderly manner, before process exit.
+    let code = {
+        // Load the default Python configuration as derived by the PyOxidizer config
+        // file used at build time.
+        let config = default_python_config();
+
+        // Construct a new Python interpreter using that config, handling any errors
+        // from construction.
+        match MainPythonInterpreter::new(config) {
+            Ok(mut interp) => {
+                // And run it using the default run configuration as specified by the
+                // configuration. If an uncaught Python exception is raised, handle it.
+                // This includes the special SystemExit, which is a request to terminate the
+                // process.
+                interp.run_as_main()
+            }
+            Err(msg) => {
+                eprintln!("{}", msg);
+                1
+            }
+        }
+    };
+
+    // And exit the process according to code execution results.
+    std::process::exit(code);
+}