import re
import yaml
from typing import Dict, Any
def convert_to_rust_type_name(name: str) -> str:
result = []
i = 0
while i < len(name):
if i < len(name) - 1 and name[i].isupper() and name[i+1].isupper():
acronym_start = i
while i < len(name) and name[i].isupper():
i += 1
acronym = name[acronym_start:i]
if i < len(name) and name[i].islower():
if len(acronym) > 1:
result.append(acronym[0] + acronym[1:-1].lower())
i -= 1
else:
result.append(acronym)
else:
result.append(acronym[0] + acronym[1:].lower())
else:
result.append(name[i])
i += 1
return ''.join(result)
def snake_to_pascal(name: str) -> str:
return ''.join(word.capitalize() for word in name.split('_'))
def pascal_to_snake(name: str) -> str:
s1 = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', name)
s2 = re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1_\2', s1)
return s2.lower()
def load_spec(spec_path: str) -> Dict[str, Any]:
with open(spec_path, 'r') as f:
return yaml.safe_load(f)
def save_spec(spec: Dict[str, Any], spec_path: str) -> None:
with open(spec_path, 'w') as f:
yaml.dump(spec, f, default_flow_style=False, sort_keys=False)
def sanitize_variant_name(name: str) -> str:
name = name.replace(' ', '_').replace('-', '_').replace(',', '_').replace('.', '_')
name = name.replace('(', '').replace(')', '').replace('[', '').replace(']', '')
parts = name.split('_')
return ''.join(part.capitalize() for part in parts if part)