mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Replace kybra_like to project-neutral example
This commit is contained in:
1 parent
f3de183607
commit
fcd564ad97
4 files changed
+51
-117
No files matched your search
@@ -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())
|
||||
@@ -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(())
|
||||
}
|
||||
@@ -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)
|
||||
@@ -0,0 +1,27 @@
|
||||
use rustpython_vm as vm;
|
||||
use vm::{builtins::PyStrRef, Interpreter};
|
||||
|
||||
fn py_main(interp: &Interpreter) -> vm::PyResult<PyStrRef> {
|
||||
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);
|
||||
}
|
||||
Reference in new issue
Block a user