/**
* Create a new {{ service_name }}.
* Invokes C FFI: {{ ffi_prefix }}_{{ service_snake }}_new()
*/
public {{ class_name }}() {
try {
MemorySegment addr = LOOKUP.find("{{ ffi_prefix }}_{{ service_snake }}_new")
.or(() -> LOOKUP.find("_{{ ffi_prefix }}_{{ service_snake }}_new"))
.orElseThrow();
FunctionDescriptor desc = FunctionDescriptor.of(ValueLayout.ADDRESS);
MethodHandle handle = LINKER.downcallHandle(addr, desc);
this.ownerHandle = (MemorySegment) handle.invoke();
if (this.ownerHandle == null) {
throw new RuntimeException("Failed to allocate service instance");
}
} catch (Throwable e) {
throw new RuntimeException("Failed to invoke constructor", e);
}
}