How do I pass numba recarray pointer to cffi function

In the following example, passing numba struct pointer via ffi.from_buffer() worked ok in pure python, but had error inside jitted function:

with open ('_car.h', 'w') as f:
    f.write ("""typedef struct Car {
    int mileage;
    double price;
} Car;
double get_price_per_mile(Car *car);
""")

with open ('_car.c', 'w') as f:
    f.write ("""#include <stdio.h>
#include "_car.h"
double get_price_per_mile(Car *car) {
    double res = car->price/(double)car->mileage;
    printf("This WORKS! mileage= %d price= %lf: %lf\\n", car->mileage, car->price, res);
    return(res);
}
""")


import cffi
import numpy
import numba
from numba import jit, njit
from numba.core.typing import cffi_utils
ffi = cffi.FFI()
ffi.cdef(open("_car.h").read())
ffi.set_source("_carlib", '#include "_car.h"', sources=["_car.c"])
ffi.compile(verbose=True)
import _carlib
cffi_utils.register_module(_carlib)
cffi_utils.register_type(ffi.typeof('Car*'), numba.types.voidptr)

cdata = ffi.new("Car[1]")
sig = cffi_utils.map_type(ffi.typeof("Car"), use_record_dtype=True)
nparr = numpy.recarray(1, dtype=sig, buf=ffi.buffer(cdata))
nparr.price[0] = 5500.0; nparr.mileage[0] = 11000

#this one works
_carlib.lib.get_price_per_mile(ffi.from_buffer(nparr))

@njit
def njit_test_drive(nparr):
    _carlib.lib.get_price_per_mile(ffi.from_buffer(nparr))

#but this one has error
njit_test_drive(nparr)

any help will be greatly appreciated.

ps. error message:
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Internal error at resolving type of attribute "get_price_per_mile" of "$4load_attr.1".
<ctype 'struct Car'>
During: typing of get attribute at car_cffi_question_for_post.py (43)
def njit_test_drive(nparr):
    _carlib.lib.get_price_per_mile(ffi.from_buffer(nparr))
^