37 lines
996 B
Python
37 lines
996 B
Python
import json
|
|
from dataclasses import dataclass
|
|
from typing import List, Dict, Any, Optional
|
|
|
|
|
|
@dataclass
|
|
class SafetyContract:
|
|
name: str
|
|
pre: Optional[str]
|
|
post: Optional[str]
|
|
budgets: Dict[str, float]
|
|
collision_rules: List[Dict[str, Any]]
|
|
trust_policy: Dict[str, Any]
|
|
|
|
|
|
def parse_safety_contract_from_json(text: str) -> SafetyContract:
|
|
data = json.loads(text)
|
|
return SafetyContract(
|
|
name=data.get("name", "contract"),
|
|
pre=data.get("pre"),
|
|
post=data.get("post"),
|
|
budgets=data.get("budgets", {}),
|
|
collision_rules=data.get("collision_rules", []),
|
|
trust_policy=data.get("trust_policy", {}),
|
|
)
|
|
|
|
|
|
def contract_to_minimal_dict(contract: SafetyContract) -> Dict[str, Any]:
|
|
return {
|
|
"name": contract.name,
|
|
"pre": contract.pre,
|
|
"post": contract.post,
|
|
"budgets": contract.budgets,
|
|
"collision_rules": contract.collision_rules,
|
|
"trust_policy": contract.trust_policy,
|
|
}
|