Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 157 additions & 0 deletions cysimdjson/cysimdjson.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
# cython: language_level=3

from libc.stdint cimport int64_t, uint64_t
from libcpp cimport bool
from libcpp.string cimport string


cdef extern from "<string_view>" namespace "std":
cppclass string_view:
pass


cdef extern from "pysimdjson/errors.h":
cdef void simdjson_error_handler()


cdef extern from "simdjson/simdjson.h" namespace "simdjson":

cdef size_t SIMDJSON_MAXSIZE_BYTES
cdef size_t SIMDJSON_PADDING

cdef enum:
SIMDJSON_VERSION_MAJOR
SIMDJSON_VERSION_MINOR
SIMDJSON_VERSION_REVISION


cdef extern from "simdjson/simdjson.h" namespace "simdjson::dom":

cdef cppclass key_value_pair "simdjson::dom::key_value_pair":
string_view key
simdjson_element value

cdef cppclass simdjson_object "simdjson::dom::object":

cppclass iterator:
iterator()

key_value_pair operator*()
iterator& operator++()
bint operator==(iterator)
bint operator!=(iterator)

string_view key()
simdjson_element value()

simdjson_object()

iterator begin()
iterator end()

size_t size()

simdjson_element at_pointer(const char*) except +simdjson_error_handler
simdjson_element operator[](const char*) except +simdjson_error_handler


cdef cppclass simdjson_array "simdjson::dom::array":

cppclass iterator:
iterator()

iterator& operator++()
bint operator!=(iterator)
simdjson_element operator*()
Comment thread
coderabbitai[bot] marked this conversation as resolved.

simdjson_array()

iterator begin()
iterator end()

size_t size()

simdjson_element at(int) except +simdjson_error_handler
simdjson_element at_pointer(const char*) except +simdjson_error_handler


cdef cppclass simdjson_element "simdjson::dom::element":

simdjson_element()

simdjson_element_type type() except +simdjson_error_handler

bool get_bool() except +simdjson_error_handler
int64_t get_int64() except +simdjson_error_handler
uint64_t get_uint64() except +simdjson_error_handler
double get_double() except +simdjson_error_handler
simdjson_array get_array() except +simdjson_error_handler
simdjson_object get_object() except +simdjson_error_handler

simdjson_element at_pointer(const char*) except +simdjson_error_handler


cdef cppclass simdjson_parser "simdjson::dom::parser":

simdjson_parser()
simdjson_parser(size_t max_capacity)

simdjson_element load(string) except +simdjson_error_handler nogil
simdjson_element parse(const char * buf, size_t len, bool realloc_if_needed) except +simdjson_error_handler nogil


cdef extern from "simdjson/simdjson.h" namespace "simdjson::dom::element_type":
cdef enum simdjson_element_type "simdjson::dom::element_type":
OBJECT,
ARRAY,
STRING,
INT64,
UINT64,
DOUBLE,
BOOL,
NULL_VALUE


cdef class JSONObject:

cdef:
simdjson_element Element
simdjson_object Object

cpdef object at_pointer(self, key)
cpdef object get_value(self)
cpdef object export(self)


cdef class JSONArray:

cdef:
simdjson_element Element
simdjson_array Array

cpdef object at_pointer(self, key)
cpdef object get_value(self)
cpdef object export(self)


cdef class JSONElement:

cdef:
simdjson_element Element

@staticmethod
cdef from_element(simdjson_element element)

cpdef object at_pointer(self, key)
cpdef object get_value(self)
cpdef object export(self)


cdef class JSONParser:

cdef:
simdjson_parser Parser

cpdef object parse(self, bytes event)
cpdef object parse_in_place(self, bytes event)
cpdef object parse_string(self, str event)
45 changes: 45 additions & 0 deletions cysimdjson/cysimdjson.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from typing import Any, Iterator

class JSONObject:
def __contains__(self, key: str) -> bool: ...
def __iter__(self) -> Iterator[str]: ...
def __getitem__(self, key: str) -> Any: ...
def __len__(self) -> int: ...
def items(self) -> Iterator[tuple[str, Any]]: ...
def get(self, key: str, default: Any = None) -> Any: ...
def keys(self) -> Iterator[str]: ...
def at_pointer(self, key: str) -> Any: ...
def get_value(self) -> "JSONObject": ...
def export(self) -> dict: ...
def get_addr(self) -> int: ...

class JSONArray:
def __contains__(self, item: Any) -> bool: ...
def __getitem__(self, key: int) -> Any: ...
def __len__(self) -> int: ...
def __iter__(self) -> Iterator[Any]: ...
def at_pointer(self, key: str) -> Any: ...
def get_value(self) -> "JSONArray": ...
def export(self) -> list: ...
def get_addr(self) -> int: ...

class JSONElement:
def at_pointer(self, key: str) -> "JSONElement": ...
def get_value(self) -> Any: ...
def export(self) -> Any: ...
def get_addr(self) -> int: ...

class JSONParser:
def __init__(self, max_capacity: int | None = None) -> None: ...
def parse(self, event: bytes) -> JSONObject | JSONArray | JSONElement: ...
def parse_in_place(self, event: bytes) -> JSONObject | JSONArray | JSONElement: ...
def parse_string(self, event: str) -> JSONObject | JSONArray | JSONElement: ...
def load(self, path: str) -> Any: ...
def loads(self, content: str) -> Any: ...
def active_implementation(self) -> str: ...

def addr_to_element(element_addr: int) -> JSONObject | JSONArray | JSONElement: ...

MAXSIZE_BYTES: int
PADDING: int
SIMDJSON_VERSION: str
Loading