Replace kybra_like to project-neutral example

This commit is contained in:
Jeong Yunwon committed 2022-06-16 01:07:26 +09:00
1 parent f3de183607
commit fcd564ad97
4 files changed
+51 -117

No files matched your search

-90
View File
@@ -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())
-27
View File
@@ -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(())
}
+24
View File
@@ -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)
+27
View File
@@ -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);
}