diff --git a/examples/kybra_like.py b/examples/kybra_like.py deleted file mode 100644 index c94ad3f59..000000000 --- a/examples/kybra_like.py +++ /dev/null @@ -1,90 +0,0 @@ -from dataclasses import dataclass -from typing import Dict, Any - -Query = Any -Update = Any -nat64 = Any - -__all__ = [ - "initialize_supply", - "transfer", - "balance", - "ticker", - "name", - "total_supply", -] - - -@dataclass -class Account: - address: str - balance: nat64 - - -@dataclass -class State: - accounts: Dict[str, Account] - total_supply: nat64 - ticker: str - name: str - - -state = State( - accounts={}, - total_supply=0, - ticker="", - name="KYBRA", -) - - -def initialize_supply( - ticker: str, name: str, total_supply: nat64, original_address: str -) -> Update: - global state - state = State( - accounts={ - original_address: Account( - address=original_address, - balance=total_supply, - ) - }, - ticker=ticker, - name=name, - total_supply=total_supply, - ) - - return True - - -def transfer(from_: str, to: str, amount: nat64) -> Update: - global state - if state.accounts[to] is None: - state.accounts[to] = Account(address=to, balance=0) - - state.accounts[from_].balance -= amount - state.accounts[to].balance += amount - - return True - - -def balance(address: str) -> Query: - account = state.accounts[address] - if account is None: - return 0 - return account.balance - - -def ticker() -> Query: - return state.ticker - - -def name() -> Query: - return state.name - - -def total_supply() -> Query: - return state.total_supply - - -if __name__ == "__main__": - print(name()) diff --git a/examples/kybra_like.rs b/examples/kybra_like.rs deleted file mode 100644 index ae7ef9aaf..000000000 --- a/examples/kybra_like.rs +++ /dev/null @@ -1,27 +0,0 @@ -use rustpython_vm as vm; -use vm::builtins::PyStrRef; - -fn main() -> vm::PyResult<()> { - let interp = vm::Interpreter::with_init(Default::default(), |vm| { - vm.add_native_modules(rustpython_stdlib::get_module_inits()); - }); - let result = interp - .run_or_else( - |vm, exc| { - vm.print_exception(exc.clone()); - Err(exc) - }, - |vm| { - vm.insert_sys_path(vm.new_pyobj("examples")) - .expect("add path"); - let module = vm.import("kybra_like", None, 0)?; - let name_func = module.get_attr("name", vm)?; - let result = vm.invoke(&name_func, ())?; - let result: PyStrRef = result.try_into_value(vm)?; - Ok(result) - }, - ) - .unwrap(); - println!("name: {}", &result); - Ok(()) -} diff --git a/examples/package_embed.py b/examples/package_embed.py new file mode 100644 index 000000000..6aeb723ac --- /dev/null +++ b/examples/package_embed.py @@ -0,0 +1,24 @@ +from dataclasses import dataclass +from typing import Any + +__all__ = ["context"] + + +@dataclass +class Context: + name: str + something: Any + + +_context = Context( + name="test name", + something=None, +) + + +def context() -> Context: + return _context + + +if __name__ == "__main__": + print(context().name) diff --git a/examples/package_embed.rs b/examples/package_embed.rs new file mode 100644 index 000000000..664ea6d3c --- /dev/null +++ b/examples/package_embed.rs @@ -0,0 +1,27 @@ +use rustpython_vm as vm; +use vm::{builtins::PyStrRef, Interpreter}; + +fn py_main(interp: &Interpreter) -> vm::PyResult { + interp.enter(|vm| { + vm.insert_sys_path(vm.new_pyobj("examples")) + .expect("add path"); + let module = vm.import("package_embed", None, 0)?; + let name_func = module.get_attr("context", vm)?; + let result = vm.invoke(&name_func, ())?; + let result: PyStrRef = result.get_attr("name", vm)?.try_into_value(vm)?; + vm::PyResult::Ok(result) + }) +} + +fn main() -> vm::PyResult<()> { + let interp = vm::Interpreter::with_init(Default::default(), |vm| { + vm.add_native_modules(rustpython_stdlib::get_module_inits()); + }); + let result = py_main(&interp); + let result = result.and_then(|result| { + println!("name: {}", result); + Ok(()) + }); + let exit_code = interp.run(|_vm| result); + std::process::exit(exit_code); +}