Ffi¶
Python bindings for the Pact FFI.
This module provides a Python interface to the Pact FFI. It is a thin wrapper around the C API, and is intended to be used by the Pact Python client library to provide a Pythonic interface to Pact.
Warning
This module is not intended to be used directly by Pact users. Pact users should use the Pact Python client library instead. No guarantees are made about the stability of this module's API.
Developer Notes¶
This modules should provide the following only:
- Basic Enum classes
- Simple wrappers around functions, including the casting of input and output values between the high level Python types and the low level C types.
- Simple wrappers around some of the low-level types. Specifically designed to automatically handle the freeing of memory when the Python object is destroyed.
These low-level functions may then be combined into higher level classes and modules. Ideally, all code outside of this module should be written in pure Python and not worry about allocating or freeing memory.
During initial implementation, a lot of these functions will simply raise a
NotImplementedError
.
For those unfamiliar with CFFI, please make sure to read the CFFI documentation.
Handles¶
The Rust library exposes a number of handles to internal data structures. This is done to avoid exposing the internal implementation details of the library to users of the library, and avoid unnecessarily casting to and from possibly complicated structs.
In the Rust library, the handles are thin wrappers around integers, and unfortunately the CFFI interface sees this and automatically unwraps them, exposing the underlying integer. As a result, we must re-wrap the integer returned by the CFFI interface. This unfortunately means that we may be subject to changes in private implementation details upstream.
Freeing Memory¶
Python has a garbage collector, and as a result, we don't need to worry about manually freeing memory. Having said that, Python's garbace collector is only aware of Python objects, and not of any memory allocated by the Rust library.
To ensure that the memory allocated by the Rust library is freed, we must make
sure to define the
__del__
method to call the appropriate free function whenever the Python object is
destroyed.
Note that there are some rather subtle details as to when this is called, when
it may never be called, and what global variables are accessible. This is
explained in the documentation for __del__
above, and in Python's garbage
collection module.
Error Handling¶
The FFI function should handle all errors raised by the function call, and raise an appropriate Python exception. The exception should be raised using the appropriate Python exception class, and should be documented in the function's docstring.
Attributes¶
GeneratorCategoryOptions = Literal['METHOD', 'method', 'PATH', 'path', 'HEADER', 'header', 'QUERY', 'query', 'BODY', 'body', 'STATUS', 'status', 'METADATA', 'metadata']
module-attribute
¶
Generator Category Options.
Type alias for the string literals which represent the Generator Category Options.
MatchingRuleCategoryOptions = Literal['METHOD', 'method', 'PATH', 'path', 'HEADER', 'header', 'QUERY', 'query', 'BODY', 'body', 'STATUS', 'status', 'CONTENTS', 'contents', 'METADATA', 'metadata']
module-attribute
¶
logger = logging.getLogger(__name__)
module-attribute
¶
Classes¶
AsynchronousMessage(ptr: cffi.FFI.CData, *, owned: bool = False)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
owned
|
Whether the message is owned by something else or not. This determines whether the message should be freed when the Python object is destroyed.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
Attributes¶
contents: MessageContents | None
property
¶
The contents of the message.
This may be None
if the message has no contents.
description: str
property
¶
Description of this message interaction.
This needs to be unique in the pact file.
Functions¶
provider_states() -> GeneratorType[ProviderState, None, None]
¶
Optional provider state for the interaction.
Consumer
¶
ExpressionValueType
¶
Bases: Enum
Expression Value Type.
Attributes¶
BOOLEAN = lib.ExpressionValueType_Boolean
class-attribute
instance-attribute
¶
DECIMAL = lib.ExpressionValueType_Decimal
class-attribute
instance-attribute
¶
INTEGER = lib.ExpressionValueType_Integer
class-attribute
instance-attribute
¶
NUMBER = lib.ExpressionValueType_Number
class-attribute
instance-attribute
¶
STRING = lib.ExpressionValueType_String
class-attribute
instance-attribute
¶
UNKNOWN = lib.ExpressionValueType_Unknown
class-attribute
instance-attribute
¶
Generator(ptr: cffi.FFI.CData)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
Attributes¶
json: dict[str, Any]
property
¶
Dictionary representation of the generator.
Functions¶
generate_integer(context: dict[str, Any] | None = None) -> int
¶
Generate an integer from the generator.
PARAMETER | DESCRIPTION |
---|---|
context
|
JSON payload containing any generator context. For example:
|
Source code in src/pact/v3/ffi.py
generate_string(context: dict[str, Any] | None = None) -> str
¶
Generate a string from the generator.
PARAMETER | DESCRIPTION |
---|---|
context
|
JSON payload containing any generator context. For example:
|
Source code in src/pact/v3/ffi.py
GeneratorCategory
¶
Bases: Enum
Generator Category.
Attributes¶
BODY = lib.GeneratorCategory_BODY
class-attribute
instance-attribute
¶
HEADER = lib.GeneratorCategory_HEADER
class-attribute
instance-attribute
¶
METADATA = lib.GeneratorCategory_METADATA
class-attribute
instance-attribute
¶
METHOD = lib.GeneratorCategory_METHOD
class-attribute
instance-attribute
¶
PATH = lib.GeneratorCategory_PATH
class-attribute
instance-attribute
¶
QUERY = lib.GeneratorCategory_QUERY
class-attribute
instance-attribute
¶
STATUS = lib.GeneratorCategory_STATUS
class-attribute
instance-attribute
¶
GeneratorCategoryIterator(ptr: cffi.FFI.CData)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
GeneratorKeyValuePair(ptr: cffi.FFI.CData)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
HttpRequest
¶
HttpResponse
¶
InteractionHandle(ref: int)
¶
Handle to a HTTP Interaction.
PARAMETER | DESCRIPTION |
---|---|
ref
|
Reference to the Interaction Handle.
TYPE:
|
Source code in src/pact/v3/ffi.py
LevelFilter
¶
Bases: Enum
Level Filter.
Attributes¶
DEBUG = lib.LevelFilter_Debug
class-attribute
instance-attribute
¶
ERROR = lib.LevelFilter_Error
class-attribute
instance-attribute
¶
INFO = lib.LevelFilter_Info
class-attribute
instance-attribute
¶
OFF = lib.LevelFilter_Off
class-attribute
instance-attribute
¶
TRACE = lib.LevelFilter_Trace
class-attribute
instance-attribute
¶
WARN = lib.LevelFilter_Warn
class-attribute
instance-attribute
¶
MatchingRule(ptr: cffi.FFI.CData)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
MatchingRuleCategory
¶
Bases: Enum
Matching Rule Category.
Attributes¶
BODY = lib.MatchingRuleCategory_BODY
class-attribute
instance-attribute
¶
CONTENTS = lib.MatchingRuleCategory_CONTENTS
class-attribute
instance-attribute
¶
HEADER = lib.MatchingRuleCategory_HEADER
class-attribute
instance-attribute
¶
METADATA = lib.MatchingRuleCategory_METADATA
class-attribute
instance-attribute
¶
METHOD = lib.MatchingRuleCategory_METHOD
class-attribute
instance-attribute
¶
PATH = lib.MatchingRuleCategory_PATH
class-attribute
instance-attribute
¶
QUERY = lib.MatchingRuleCategory_QUERY
class-attribute
instance-attribute
¶
STATUS = lib.MatchingRuleCategory_STATUS
class-attribute
instance-attribute
¶
MatchingRuleCategoryIterator(ptr: cffi.FFI.CData)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
MatchingRuleDefinitionResult
¶
MatchingRuleIterator
¶
MatchingRuleKeyValuePair(ptr: cffi.FFI.CData)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
MatchingRuleResult
¶
MessageContents(ptr: cffi.FFI.CData, *, owned: bool = True)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
owned
|
Whether the message is owned by something else or not. This determines whether the message should be freed when the Python object is destroyed.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
Attributes¶
contents: str | bytes | None
property
¶
Get the contents of the message.
metadata: GeneratorType[MessageMetadataPair, None, None]
property
¶
Get the metadata for the message contents.
Functions¶
generators(category: GeneratorCategoryOptions | GeneratorCategory) -> GeneratorType[GeneratorKeyValuePair, None, None]
¶
Get the generators for the message contents.
Source code in src/pact/v3/ffi.py
matching_rules(category: MatchingRuleCategoryOptions | MatchingRuleCategory) -> GeneratorType[MatchingRuleKeyValuePair, None, None]
¶
Get the matching rules for the message contents.
Source code in src/pact/v3/ffi.py
MessageMetadataIterator(ptr: cffi.FFI.CData)
¶
Iterator over an interaction's metadata.
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
MessageMetadataPair(ptr: cffi.FFI.CData)
¶
A metadata key-value pair.
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
Mismatch
¶
Mismatches
¶
MismatchesIterator
¶
OwnedString(ptr: cffi.FFI.CData)
¶
Bases: str
A string that owns its own memory.
This is used to ensure that the memory is freed when the string is destroyed.
As this is subclassed from str
, it can be used in place of a normal string
in most cases.
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
Source code in src/pact/v3/ffi.py
Pact
¶
PactAsyncMessageIterator(ptr: cffi.FFI.CData)
¶
Iterator over a Pact's asynchronous messages.
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
PactHandle(ref: int)
¶
Handle to a Pact.
PARAMETER | DESCRIPTION |
---|---|
ref
|
Rust library reference to the Pact Handle.
TYPE:
|
Source code in src/pact/v3/ffi.py
PactInteraction
¶
PactInteractionIterator(ptr: cffi.FFI.CData)
¶
Iterator over a Pact's interactions.
Interactions encompasses all types of interactions, including HTTP interactions and messages.
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
PactServerHandle(ref: int)
¶
Handle to a Pact Server.
This does not have an exact correspondence in the Rust library. It is used to manage the lifecycle of the mock server.
Implementation Notes¶
The Rust library uses the port number as a unique identifier, in much the same was as it uses a wrapped integer for the Pact handle.
PARAMETER | DESCRIPTION |
---|---|
ref
|
Rust library reference to the Pact Server.
TYPE:
|
Source code in src/pact/v3/ffi.py
PactSpecification
¶
Bases: Enum
Pact Specification.
Attributes¶
UNKNOWN = lib.PactSpecification_Unknown
class-attribute
instance-attribute
¶
V1 = lib.PactSpecification_V1
class-attribute
instance-attribute
¶
V1_1 = lib.PactSpecification_V1_1
class-attribute
instance-attribute
¶
V2 = lib.PactSpecification_V2
class-attribute
instance-attribute
¶
V3 = lib.PactSpecification_V3
class-attribute
instance-attribute
¶
V4 = lib.PactSpecification_V4
class-attribute
instance-attribute
¶
Functions¶
from_str(version: str) -> PactSpecification
classmethod
¶
Instantiate a Pact Specification from a string.
This method is case-insensitive, and allows for the version to be specified with or without a leading "V", and with either a dot or an underscore as the separator.
PARAMETER | DESCRIPTION |
---|---|
version
|
The version of the Pact Specification.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
PactSpecification
|
The Pact Specification. |
Source code in src/pact/v3/ffi.py
PactSyncHttpIterator(ptr: cffi.FFI.CData)
¶
Iterator over a Pact's synchronous HTTP interactions.
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
PactSyncMessageIterator(ptr: cffi.FFI.CData)
¶
Iterator over a Pact's synchronous messages.
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
Provider
¶
ProviderState(ptr: cffi.FFI.CData)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
ProviderStateIterator(ptr: cffi.FFI.CData)
¶
Iterator over an interactions ProviderStates.
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
ProviderStateParamIterator(ptr: cffi.FFI.CData)
¶
Iterator over a Provider States Parameters.
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
ProviderStateParamPair(ptr: cffi.FFI.CData)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
StringResult(cdata: cffi.FFI.CData)
¶
String result.
PARAMETER | DESCRIPTION |
---|---|
cdata
|
CFFI data structure.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
Attributes¶
is_failed: bool
property
¶
Whether the result is an error.
is_ok: bool
property
¶
Whether the result is ok.
text: str
property
¶
The text of the result.
Functions¶
raise_exception() -> None
¶
Raise an exception with the text of the result.
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the result is an error. |
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the result is an error. |
Source code in src/pact/v3/ffi.py
SynchronousHttp(ptr: cffi.FFI.CData, *, owned: bool = False)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
owned
|
Whether the message is owned by something else or not. This determines whether the message should be freed when the Python object is destroyed.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
Attributes¶
description: str
property
¶
Description of this message interaction.
This needs to be unique in the pact file.
request_contents: str | bytes | None
property
¶
The contents of the request.
response_contents: str | bytes | None
property
¶
The contents of the response.
Functions¶
provider_states() -> GeneratorType[ProviderState, None, None]
¶
Optional provider state for the interaction.
Source code in src/pact/v3/ffi.py
SynchronousMessage(ptr: cffi.FFI.CData, *, owned: bool = False)
¶
PARAMETER | DESCRIPTION |
---|---|
ptr
|
CFFI data structure.
TYPE:
|
owned
|
Whether the message is owned by something else or not. This determines whether the message should be freed when the Python object is destroyed.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
If the |
Source code in src/pact/v3/ffi.py
Attributes¶
description: str
property
¶
Description of this message interaction.
This needs to be unique in the pact file.
request_contents: MessageContents
property
¶
The contents of the message.
response_contents: GeneratorType[MessageContents, None, None]
property
¶
The contents of the responses.
Functions¶
provider_states() -> GeneratorType[ProviderState, None, None]
¶
Optional provider state for the interaction.
Source code in src/pact/v3/ffi.py
VerifierHandle(ref: cffi.FFI.CData)
¶
Handle to a Verifier.
PARAMETER | DESCRIPTION |
---|---|
ref
|
Rust library reference to the Verifier Handle.
TYPE:
|
Source code in src/pact/v3/ffi.py
Functions¶
add_text_comment(interaction: InteractionHandle, comment: str) -> None
¶
Add a text comment to the interaction.
PARAMETER | DESCRIPTION |
---|---|
interaction
|
Interaction handle to set the comments for.
TYPE:
|
comment
|
Comment value. This is a regular string value.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the comment could not be added. |
Source code in src/pact/v3/ffi.py
async_message_delete(message: AsynchronousMessage) -> None
¶
Destroy the AsynchronousMessage
being pointed to.
Rust pactffi_async_message_delete
Source code in src/pact/v3/ffi.py
async_message_generate_contents(message: AsynchronousMessage) -> MessageContents | None
¶
Get the message contents of an AsynchronousMessage
as a MessageContents
pointer.
This function differs from async_message_get_contents
in
that it will process the message contents for any generators or matchers
that are present in the message in order to generate the actual message
contents as would be received by the consumer.
Rust
pactffi_async_message_generate_contents
If the message contents are missing, this function will return None
.
Source code in src/pact/v3/ffi.py
async_message_get_contents(message: AsynchronousMessage) -> MessageContents | None
¶
Get the message contents of an AsynchronousMessage
as a MessageContents
pointer.
Rust
pactffi_async_message_get_contents
If the message contents are missing, this function will return None
.
Source code in src/pact/v3/ffi.py
async_message_get_contents_bin(message: AsynchronousMessage) -> str
¶
Get the contents of an AsynchronousMessage
as bytes.
Rust
pactffi_async_message_get_contents_bin
Safety¶
The number of bytes in the buffer will be returned by
pactffi_async_message_get_contents_length
. It is safe to use the pointer
while the message is not deleted or changed. Using the pointer after the
message is mutated or deleted may lead to undefined behaviour.
Error Handling¶
If the message is NULL, returns NULL. If the body of the message is missing, then this function also returns NULL.
Source code in src/pact/v3/ffi.py
async_message_get_contents_length(message: AsynchronousMessage) -> int
¶
Get the length of the contents of a AsynchronousMessage
.
Rust
pactffi_async_message_get_contents_length
Safety¶
This function is safe.
Error Handling¶
If the message is NULL, returns 0. If the body of the request is missing, then this function also returns 0.
Source code in src/pact/v3/ffi.py
async_message_get_contents_str(message: AsynchronousMessage) -> str
¶
Get the message contents of an AsynchronousMessage
in string form.
Rust pactffi_async_message_get_contents_str
Safety¶
The returned string must be deleted with pactffi_string_delete
.
The returned string can outlive the message.
Error Handling¶
If the message is NULL, returns NULL. If the body of the message is missing, then this function also returns NULL. This means there's no mechanism to differentiate with this function call alone between a NULL message and a missing message body.
Source code in src/pact/v3/ffi.py
async_message_get_description(message: AsynchronousMessage) -> str
¶
Get a copy of the description.
Rust
pactffi_async_message_get_description
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the description cannot be retrieved. |
Source code in src/pact/v3/ffi.py
async_message_get_provider_state(message: AsynchronousMessage, index: int) -> ProviderState
¶
Get a copy of the provider state at the given index from this message.
Rust
pactffi_async_message_get_provider_state
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the provider state cannot be retrieved. |
Source code in src/pact/v3/ffi.py
async_message_get_provider_state_iter(message: AsynchronousMessage) -> ProviderStateIterator
¶
Get an iterator over provider states.
Rust pactffi_async_message_get_provider_state_iter
Safety¶
The underlying data must not change during iteration.
Source code in src/pact/v3/ffi.py
async_message_new() -> AsynchronousMessage
¶
Get a mutable pointer to a newly-created default message on the heap.
Rust pactffi_async_message_new
Safety¶
This function is safe.
Error Handling¶
Returns NULL on error.
Source code in src/pact/v3/ffi.py
async_message_set_contents_bin(message: AsynchronousMessage, contents: str, len: int, content_type: str) -> None
¶
Sets the contents of the message as an array of bytes.
Rust
pactffi_async_message_set_contents_bin
message
- the message to set the contents forcontents
- pointer to contents to copy fromlen
- number of bytes to copy from the contents pointercontent_type
- pointer to the NULL-terminated UTF-8 string containing the content type of the data.
Safety¶
The contents pointer must be valid for reads of len
bytes, and it must be
properly aligned and consecutive. Otherwise behaviour is undefined.
Error Handling¶
If the contents is a NULL pointer, it will set the message contents as null. If the content type is a null pointer, or can't be parsed, it will set the content type as unknown.
Source code in src/pact/v3/ffi.py
async_message_set_contents_str(message: AsynchronousMessage, contents: str, content_type: str) -> None
¶
Sets the contents of the message as a string.
Rust
pactffi_async_message_set_contents_str
message
- the message to set the contents forcontents
- pointer to contents to copy from. Must be a valid NULL-terminated UTF-8 string pointer.content_type
- pointer to the NULL-terminated UTF-8 string containing the content type of the data.
Safety¶
The message contents and content type must either be NULL pointers, or point to valid UTF-8 encoded NULL-terminated strings. Otherwise behaviour is undefined.
Error Handling¶
If the contents is a NULL pointer, it will set the message contents as null. If the content type is a null pointer, or can't be parsed, it will set the content type as unknown.
Source code in src/pact/v3/ffi.py
async_message_set_description(message: AsynchronousMessage, description: str) -> int
¶
Write the description
field on the AsynchronousMessage
.
Rust pactffi_async_message_set_description
Safety¶
description
must contain valid UTF-8. Invalid UTF-8
will be replaced with U+FFFD REPLACEMENT CHARACTER.
This function will only reallocate if the new string does not fit in the existing buffer.
Error Handling¶
Errors will be reported with a non-zero return value.
Source code in src/pact/v3/ffi.py
check_regex(regex: str, example: str) -> bool
¶
Checks that the example string matches the given regex.
Safety¶
Both the regex and example pointers must be valid pointers to NULL-terminated strings. Invalid pointers will result in undefined behaviour.
Source code in src/pact/v3/ffi.py
cleanup_mock_server(mock_server_handle: PactServerHandle) -> None
¶
External interface to cleanup a mock server.
This function will try terminate the mock server with the given port number and cleanup any memory allocated for it.
Rust
pactffi_cleanup_mock_server
PARAMETER | DESCRIPTION |
---|---|
mock_server_handle
|
Handle to the mock server to cleanup.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the mock server could not be cleaned up. |
Source code in src/pact/v3/ffi.py
cleanup_plugins(pact: PactHandle) -> None
¶
Decrement the access count on any plugins that are loaded for the Pact.
This will shutdown any plugins that are no longer required (access count is zero).
Source code in src/pact/v3/ffi.py
consumer_get_name(consumer: Consumer) -> str
¶
Get a copy of this consumer's name.
Rust pactffi_consumer_get_name
The copy must be deleted with pactffi_string_delete
.
Usage¶
// Assuming `file_name` and `json_str` are already defined.
MessagePact *message_pact = pactffi_message_pact_new_from_json(file_name, json_str);
if (message_pact == NULLPTR) {
// handle error.
}
Consumer *consumer = pactffi_message_pact_get_consumer(message_pact);
if (consumer == NULLPTR) {
// handle error.
}
char *name = pactffi_consumer_get_name(consumer);
if (name == NULL) {
// handle error.
}
printf("%s\n", name);
pactffi_string_delete(name);
Errors¶
This function will fail if it is passed a NULL pointer, or the Rust string contains an embedded NULL byte. In the case of error, a NULL pointer will be returned.
Source code in src/pact/v3/ffi.py
create_mock_server(pact_str: str, addr_str: str, *, tls: bool) -> int
¶
[DEPRECATED] External interface to create a HTTP mock server.
A pointer to the pact JSON as a NULL-terminated C string is passed in, as well as the port for the mock server to run on. A value of 0 for the port will result in a port being allocated by the operating system. The port of the mock server is returned.
Rust
pactffi_create_mock_server
pact_str
- Pact JSONaddr_str
- Address to bind to in the form name:port (i.e. 127.0.0.1:80)tls
- boolean flag to indicate of the mock server should use TLS (using a self-signed certificate)
This function is deprecated and replaced with
pactffi_create_mock_server_for_transport
.
Errors¶
Errors are returned as negative values.
Error | Description |
---|---|
-1 | A null pointer was received |
-2 | The pact JSON could not be parsed |
-3 | The mock server could not be started |
-4 | The method panicked |
-5 | The address is not valid |
-6 | Could not create the TLS configuration with the self-signed certificate |
Source code in src/pact/v3/ffi.py
create_mock_server_for_pact(pact: PactHandle, addr_str: str, *, tls: bool) -> int
¶
[DEPRECATED] External interface to create a HTTP mock server.
A Pact handle is passed in, as well as the port for the mock server to run on. A value of 0 for the port will result in a port being allocated by the operating system. The port of the mock server is returned.
Rust
pactffi_create_mock_server_for_pact
pact
- Handle to a Pact model created with created withpactffi_new_pact
.addr_str
- Address to bind to in the form name:port (i.e. 127.0.0.1:0). Must be a valid UTF-8 NULL-terminated string.tls
- boolean flag to indicate of the mock server should use TLS (using a self-signed certificate)
This function is deprecated and replaced with
pactffi_create_mock_server_for_transport
.
Errors¶
Errors are returned as negative values.
Error | Description |
---|---|
-1 | An invalid handle was received. Handles should be created with pactffi_new_pact |
-3 | The mock server could not be started |
-4 | The method panicked |
-5 | The address is not valid |
-6 | Could not create the TLS configuration with the self-signed certificate |
Source code in src/pact/v3/ffi.py
create_mock_server_for_transport(pact: PactHandle, addr: str, port: int, transport: str, transport_config: str | None) -> PactServerHandle
¶
Create a mock server for the provided Pact handle and transport.
Rust
pactffi_create_mock_server_for_transport
PARAMETER | DESCRIPTION |
---|---|
pact
|
Handle to the Pact model.
TYPE:
|
addr
|
The address to bind to.
TYPE:
|
port
|
The port number to bind to. A value of zero will result in the operating system allocating an available port.
TYPE:
|
transport
|
The transport to use (i.e. http, https, grpc). The underlying Pact library will interpret this, typically in a case-sensitive way.
TYPE:
|
transport_config
|
Configuration to be passed to the transport. This must be a valid
JSON string, or
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
PactServerHandle
|
A handle to the mock server. |
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the mock server could not be created. The error message will contain details of the error. |
Source code in src/pact/v3/ffi.py
4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 |
|
enable_ansi_support() -> None
¶
Enable ANSI coloured output on Windows.
On non-Windows platforms, this function is a no-op.
Rust
pactffi_enable_ansi_support
Safety¶
This function is safe.
Source code in src/pact/v3/ffi.py
fetch_log_buffer(log_id: str) -> str
¶
Fetch the in-memory logger buffer contents.
This will only have any contents if the buffer
sink has been configured to
log to. The contents will be allocated on the heap and will need to be freed
with pactffi_string_delete
.
Fetches the logs associated with the provided identifier, or uses the "global" one if the identifier is not specified (i.e. NULL).
Returns a NULL pointer if the buffer can't be fetched. This can occur is there is not sufficient memory to make a copy of the contents or the buffer contains non-UTF-8 characters.
Safety¶
This function will fail if the log_id pointer is invalid or does not point to a NULL terminated string.
Source code in src/pact/v3/ffi.py
free_pact_handle(pact: PactHandle) -> None
¶
Delete a Pact handle and free the resources used by it.
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the handle could not be freed. |
Source code in src/pact/v3/ffi.py
free_string(s: str) -> None
¶
[DEPRECATED] Frees the memory allocated to a string by another function.
This function is deprecated. Use pactffi_string_delete
instead.
Safety¶
The string pointer can be NULL (which is a no-op), but if it is not a valid pointer the call will result in undefined behaviour.
Source code in src/pact/v3/ffi.py
generate_datetime_string(format: str) -> StringResult
¶
Generates a datetime value from the provided format string.
This uses the current system date and time NOTE: The memory for the returned
string needs to be freed with the pactffi_string_delete
function
Rust
pactffi_generate_datetime_string
Safety¶
If the format string pointer is NULL or has invalid UTF-8 characters, an error result will be returned. If the format string pointer is not a valid pointer or is not a NULL-terminated string, this will lead to undefined behaviour.
Source code in src/pact/v3/ffi.py
generate_regex_value(regex: str) -> StringResult
¶
Generates an example string based on the provided regex.
NOTE: The memory for the returned string needs to be freed with the
pactffi_string_delete
function.
Rust
pactffi_generate_regex_value
Safety¶
The regex pointer must be a valid pointer to a NULL-terminated string. Invalid pointers will result in undefined behaviour.
Source code in src/pact/v3/ffi.py
generator_generate_integer(generator: Generator, context_json: str) -> int
¶
Generate an integer value using the provided generator.
An optional JSON payload containing any generator context can be given. The
context value is used for generators like ProviderStateGenerator
(which
should be the values returned from the Provider State callback function).
Rust
pactffi_generator_generate_integer
If anything goes wrong or the generator is not a type that can generate an integer value, it will return a zero value.
Source code in src/pact/v3/ffi.py
generator_generate_string(generator: Generator, context_json: str) -> str
¶
Generate a string value using the provided generator.
An optional JSON payload containing any generator context ca be given. The
context value is used for generators like MockServerURL
(which should
contain details about the running mock server) and ProviderStateGenerator
(which should be the values returned from the Provider State callback
function).
Rust
pactffi_generator_generate_string
If anything goes wrong, it will return a NULL pointer.
Source code in src/pact/v3/ffi.py
generator_to_json(generator: Generator) -> str
¶
Get the JSON form of the generator.
Rust
pactffi_generator_to_json
The returned string must be deleted with pactffi_string_delete
.
Safety¶
This function will fail if it is passed a NULL pointer, or the owner of the generator has been deleted.
Source code in src/pact/v3/ffi.py
generators_iter_delete(iter: GeneratorCategoryIterator) -> None
¶
Free the iterator when you're done using it.
Rust
pactffi_generators_iter_delete
Source code in src/pact/v3/ffi.py
generators_iter_next(iter: GeneratorCategoryIterator) -> GeneratorKeyValuePair
¶
Get the next path and generator out of the iterator, if possible.
Rust
pactffi_generators_iter_next
The returned pointer must be deleted with
pactffi_generator_iter_pair_delete
.
RAISES | DESCRIPTION |
---|---|
StopIteration
|
If the iterator has reached the end. |
Source code in src/pact/v3/ffi.py
generators_iter_pair_delete(pair: GeneratorKeyValuePair) -> None
¶
Free a pair of key and value returned from pactffi_generators_iter_next
.
Rust
pactffi_generators_iter_pair_delete
Source code in src/pact/v3/ffi.py
get_error_message(length: int = 1024) -> str | None
¶
Provide the error message from LAST_ERROR
to the calling C code.
Rust
pactffi_get_error_message
This function should be called after any other function in the pact_matching FFI indicates a failure with its own error message, if the caller wants to get more context on why the error happened.
Do note that this error-reporting mechanism only reports the top-level error message, not any source information embedded in the original Rust error type. If you want more detailed information for debugging purposes, use the logging interface.
PARAMETER | DESCRIPTION |
---|---|
length
|
The length of the buffer to allocate for the error message. If the error message is longer than this, it will be truncated.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
str | None
|
A string containing the error message, or None if there is no error |
str | None
|
message. |
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the error message could not be retrieved. |
Source code in src/pact/v3/ffi.py
get_tls_ca_certificate() -> OwnedString
¶
Fetch the CA Certificate used to generate the self-signed certificate.
Rust
pactffi_get_tls_ca_certificate
NOTE: The string for the result is allocated on the heap, and will have to be freed by the caller using pactffi_string_delete.
Errors¶
An empty string indicates an error reading the pem file.
Source code in src/pact/v3/ffi.py
given(interaction: InteractionHandle, description: str) -> None
¶
Adds a provider state to the Interaction.
PARAMETER | DESCRIPTION |
---|---|
interaction
|
Handle to the Interaction.
TYPE:
|
description
|
The provider state description. It needs to be unique.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the provider state could not be specified. |
Source code in src/pact/v3/ffi.py
given_with_param(interaction: InteractionHandle, description: str, name: str, value: str) -> None
¶
Adds a parameter key and value to a provider state to the Interaction.
If the provider state does not exist, a new one will be created, otherwise the parameter will be merged into the existing one. The parameter value will be parsed as JSON.
PARAMETER | DESCRIPTION |
---|---|
interaction
|
Handle to the Interaction.
TYPE:
|
description
|
The provider state description.
TYPE:
|
name
|
Parameter name.
TYPE:
|
value
|
Parameter value as JSON.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the interaction state could not be updated. |
Source code in src/pact/v3/ffi.py
given_with_params(interaction: InteractionHandle, description: str, params: str) -> None
¶
Adds a provider state to the Interaction.
If the params is not an JSON object, it will add it as a single parameter
with a value
key.
Rust
pactffi_given_with_params
PARAMETER | DESCRIPTION |
---|---|
interaction
|
Handle to the Interaction.
TYPE:
|
description
|
The provider state description.
TYPE:
|
params
|
Parameter values as a JSON fragment.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the interaction state could not be updated. |
Source code in src/pact/v3/ffi.py
handle_get_pact_spec_version(handle: PactHandle) -> PactSpecification
¶
Fetches the Pact specification version for the given Pact model.
Rust
pactffi_handle_get_pact_spec_version
PARAMETER | DESCRIPTION |
---|---|
handle
|
Handle to a Pact model.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
PactSpecification
|
The spec version for the Pact model. |
Source code in src/pact/v3/ffi.py
init(log_env_var: str) -> None
¶
Initialise the mock server library.
This can provide an environment variable name to use to set the log levels. This function should only be called once, as it tries to install a global tracing subscriber.
Safety¶
log_env_var must be a valid NULL terminated UTF-8 string.
Source code in src/pact/v3/ffi.py
init_with_log_level(level: str = 'INFO') -> None
¶
Initialises logging, and sets the log level explicitly.
This function should only be called once, as it tries to install a global tracing subscriber.
Rust
pactffi_init_with_log_level
PARAMETER | DESCRIPTION |
---|---|
level
|
One of TRACE, DEBUG, INFO, WARN, ERROR, NONE/OFF. Case-insensitive.
TYPE:
|
Safety¶
Exported functions are inherently unsafe.
Source code in src/pact/v3/ffi.py
interaction_contents(interaction: InteractionHandle, part: InteractionPart, content_type: str, contents: str) -> None
¶
Setup the interaction part using a plugin.
The contents is a JSON string that will be passed on to the plugin to configure the interaction part. Refer to the plugin documentation on the format of the JSON contents.
Rust
pactffi_interaction_contents
PARAMETER | DESCRIPTION |
---|---|
interaction
|
Handle to the interaction to configure.
TYPE:
|
part
|
The part of the interaction to configure (request or response). It is ignored for messages.
TYPE:
|
content_type
|
Mime type of the contents.
TYPE:
|
contents
|
JSON contents that gets passed to the plugin.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the interaction could not be configured |
Source code in src/pact/v3/ffi.py
interaction_test_name(interaction: InteractionHandle, test_name: str) -> None
¶
Sets the test name annotation for the interaction.
This allows capturing the name of the test as metadata. This can only be used with V4 interactions.
Rust
pactffi_interaction_test_name
PARAMETER | DESCRIPTION |
---|---|
interaction
|
Handle to the Interaction.
TYPE:
|
test_name
|
The test name to set.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If the test name can not be set. |
Source code in src/pact/v3/ffi.py
log_message(message: str, log_level: LevelFilter | str = LevelFilter.ERROR, source: str | None = None) -> None
¶
Log using the shared core logging facility.
This is useful for callers to have a single set of logs.
PARAMETER | DESCRIPTION |
---|---|
message
|
The contents written to the log
TYPE:
|
log_level
|
The verbosity at which this message should be logged.
TYPE:
|
source
|
The source of the log, such as the class, module or caller.
TYPE:
|
Source code in src/pact/v3/ffi.py
log_to_buffer(level_filter: LevelFilter | str = LevelFilter.ERROR) -> None
¶
Convenience function to direct all logging to a task local memory buffer.
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If there was an error setting the logger. |
Source code in src/pact/v3/ffi.py
log_to_file(file_name: str, level_filter: LevelFilter) -> int
¶
Convenience function to direct all logging to a file.
Safety¶
This function will fail if the file_name pointer is invalid or does not point to a NULL terminated string.
Source code in src/pact/v3/ffi.py
log_to_stderr(level_filter: LevelFilter | str = LevelFilter.ERROR) -> None
¶
Convenience function to direct all logging to stderr.
PARAMETER | DESCRIPTION |
---|---|
level_filter
|
The level of logs to filter to. If a string is given, it must match
one of the
TYPE:
|
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If there was an error setting the logger. |
Source code in src/pact/v3/ffi.py
log_to_stdout(level_filter: LevelFilter) -> int
¶
Convenience function to direct all logging to stdout.
Source code in src/pact/v3/ffi.py
logger_apply() -> int
¶
Apply the previously configured sinks and levels to the program.
If no sinks have been setup, will set the log level to info and the target to standard out.
This function will install a global tracing subscriber. Any attempts to
modify the logger after the call to logger_apply
will fail.
Source code in src/pact/v3/ffi.py
logger_attach_sink(sink_specifier: str, level_filter: LevelFilter) -> int
¶
Attach an additional sink to the thread-local logger.
Rust
pactffi_logger_attach_sink
This logger does nothing until pactffi_logger_apply
has been called.
Types of sinks can be specified:
- stdout (
pactffi_logger_attach_sink("stdout", LevelFilter_Info)
) - stderr (
pactffi_logger_attach_sink("stderr", LevelFilter_Debug)
) - file w/ file path (
pactffi_logger_attach_sink("file /some/file/path", LevelFilter_Trace)
) - buffer (
pactffi_logger_attach_sink("buffer", LevelFilter_Debug)
)
Usage¶
Error Handling¶
The return error codes are as follows:
-1
: Can't set logger (applying the logger failed, perhaps because one is applied already).-2
: No logger has been initialized (callpactffi_logger_init
before any other log function).-3
: The sink specifier was not UTF-8 encoded.-4
: The sink type specified is not a known type (known types: "stdout", "stderr", or "file /some/path").-5
: No file path was specified in a file-type sink specification.-6
: Opening a sink to the specified file path failed (check permissions).
Safety¶
This function checks the validity of the passed-in sink specifier, and errors out if the specifier isn't valid UTF-8. Passing in an invalid or NULL pointer will result in undefined behaviour.
Source code in src/pact/v3/ffi.py
logger_init() -> None
¶
Initialize the FFI logger with no sinks.
This initialized logger does nothing until pactffi_logger_apply
has been called.
Usage¶
Safety¶
This function is always safe to call.
Source code in src/pact/v3/ffi.py
matcher_definition_delete(definition: MatchingRuleDefinitionResult) -> None
¶
Frees the memory used by the result of parsing the matching definition expression.
Rust pactffi_matcher_definition_delete
Source code in src/pact/v3/ffi.py
matcher_definition_error(definition: MatchingRuleDefinitionResult) -> str
¶
Returns any error message from parsing a matching definition expression.
If there is no error, it will return a NULL pointer, otherwise returns the
error message as a NULL-terminated string. The returned string must be freed
using the pactffi_string_delete
function once done with it.
Rust
pactffi_matcher_definition_error
Source code in src/pact/v3/ffi.py
matcher_definition_generator(definition: MatchingRuleDefinitionResult) -> Generator
¶
Returns the generator from parsing a matching definition expression.
If there was an error or there is no associated generator, it will return a NULL pointer, otherwise returns the generator as a pointer.
Rust
pactffi_matcher_definition_generator
The generator pointer will be a valid pointer as long as
pactffi_matcher_definition_delete
has not been called on the definition.
Using the generator pointer after the definition has been deleted will
result in undefined behaviour.
Source code in src/pact/v3/ffi.py
matcher_definition_iter(definition: MatchingRuleDefinitionResult) -> MatchingRuleIterator
¶
Returns an iterator over the matching rules from the parsed definition.
The iterator needs to be deleted with the
pactffi_matching_rule_iter_delete
function once done with it.
Rust
pactffi_matcher_definition_iter
If there was an error parsing the expression, this function will return a NULL pointer.
Source code in src/pact/v3/ffi.py
matcher_definition_value(definition: MatchingRuleDefinitionResult) -> str
¶
Returns the value from parsing a matching definition expression.
If there was an error, it will return a NULL pointer, otherwise returns the
value as a NULL-terminated string. The returned string must be freed using
the pactffi_string_delete
function once done with it.
Rust
pactffi_matcher_definition_value
Note that different expressions values can have types other than a string.
Use pactffi_matcher_definition_value_type
to get the actual type of the
value. This function will always return the string representation of the
value.
Source code in src/pact/v3/ffi.py
matcher_definition_value_type(definition: MatchingRuleDefinitionResult) -> ExpressionValueType
¶
Returns the type of the value from parsing a matching definition expression.
If there was an error parsing the expression, it will return Unknown.
Rust
pactffi_matcher_definition_value_type
Source code in src/pact/v3/ffi.py
matches_binary_value(matching_rule: MatchingRule, expected_value: str, expected_value_len: int, actual_value: str, actual_value_len: int, cascaded: int) -> OwnedString
¶
Determines if the binary value matches the given matching rule.
If the value matches OK, will return a NULL pointer. If the value does not
match, will return a error message as a NULL terminated string. The error
message pointer will need to be deleted with the pactffi_string_delete
function once it is no longer required.
Rust
pactffi_matches_binary_value
- matching_rule - pointer to a matching rule
- expected_value - value we expect to get
- expected_value_len - length of the expected value bytes
- actual_value - value to match
- actual_value_len - length of the actual value bytes
- cascaded - if the matching rule has been cascaded from a parent. 0 == false, 1 == true
Safety¶
The matching rule, expected value and actual value pointers must be a valid pointers. expected_value_len and actual_value_len must contain the number of bytes that the value pointers point to. Passing invalid lengths can lead to undefined behaviour.
Source code in src/pact/v3/ffi.py
matches_bool_value(matching_rule: MatchingRule, expected_value: int, actual_value: int, cascaded: int) -> OwnedString
¶
Determines if the boolean value matches the given matching rule.
If the value matches OK, will return a NULL pointer. If the value does not
match, will return a error message as a NULL terminated string. The error
message pointer will need to be deleted with the pactffi_string_delete
function once it is no longer required.
Rust
pactffi_matches_bool_value
- matching_rule - pointer to a matching rule
- expected_value - value we expect to get, 0 == false and 1 == true
- actual_value - value to match, 0 == false and 1 == true
- cascaded - if the matching rule has been cascaded from a parent. 0 == false, 1 == true
Safety¶
The matching rule pointer must be a valid pointer.
Source code in src/pact/v3/ffi.py
matches_f64_value(matching_rule: MatchingRule, expected_value: float, actual_value: float, cascaded: int) -> OwnedString
¶
Determines if the floating point value matches the given matching rule.
If the value matches OK, will return a NULL pointer. If the value does not
match, will return a error message as a NULL terminated string. The error
message pointer will need to be deleted with the pactffi_string_delete
function once it is no longer required.
Rust
pactffi_matches_f64_value
- matching_rule - pointer to a matching rule
- expected_value - value we expect to get
- actual_value - value to match
- cascaded - if the matching rule has been cascaded from a parent. 0 == false, 1 == true
Safety¶
The matching rule pointer must be a valid pointer.
Source code in src/pact/v3/ffi.py
matches_i64_value(matching_rule: MatchingRule, expected_value: int, actual_value: int, cascaded: int) -> OwnedString
¶
Determines if the signed integer value matches the given matching rule.
If the value matches OK, will return a NULL pointer. If the value does not
match, will return a error message as a NULL terminated string. The error
message pointer will need to be deleted with the pactffi_string_delete
function once it is no longer required.
Rust
pactffi_matches_i64_value
- matching_rule - pointer to a matching rule
- expected_value - value we expect to get
- actual_value - value to match
- cascaded - if the matching rule has been cascaded from a parent. 0 == false, 1 == true
Safety¶
The matching rule pointer must be a valid pointer.
Source code in src/pact/v3/ffi.py
matches_json_value(matching_rule: MatchingRule, expected_value: str, actual_value: str, cascaded: int) -> OwnedString
¶
Determines if the JSON value matches the given matching rule.
If the value matches OK, will return a NULL pointer. If the value does not
match, will return a error message as a NULL terminated string. The error
message pointer will need to be deleted with the pactffi_string_delete
function once it is no longer required.
Rust
pactffi_matches_json_value
- matching_rule - pointer to a matching rule
- expected_value - value we expect to get as a NULL terminated string
- actual_value - value to match as a NULL terminated string
- cascaded - if the matching rule has been cascaded from a parent. 0 == false, 1 == true
Safety¶
The matching rule pointer must be a valid pointer, and the value parameters must be valid pointers to a NULL terminated strings.
Source code in src/pact/v3/ffi.py
matches_string_value(matching_rule: MatchingRule, expected_value: str, actual_value: str, cascaded: int) -> OwnedString
¶
Determines if the string value matches the given matching rule.
If the value matches OK, will return a NULL pointer. If the value does not
match, will return a error message as a NULL terminated string. The error
message pointer will need to be deleted with the pactffi_string_delete
function once it is no longer required.
Rust
pactffi_matches_string_value
- matching_rule - pointer to a matching rule
- expected_value - value we expect to get as a NULL terminated string
- actual_value - value to match as a NULL terminated string
- cascaded - if the matching rule has been cascaded from a parent. 0 == false, 1 == true
Safety¶
The matching rule pointer must be a valid pointer, and the value parameters must be valid pointers to a NULL terminated strings.
Source code in src/pact/v3/ffi.py
matches_u64_value(matching_rule: MatchingRule, expected_value: int, actual_value: int, cascaded: int) -> OwnedString
¶
Determines if the unsigned integer value matches the given matching rule.
If the value matches OK, will return a NULL pointer. If the value does not
match, will return a error message as a NULL terminated string. The error
message pointer will need to be deleted with the pactffi_string_delete
function once it is no longer required.
Rust
pactffi_matches_u64_value
- matching_rule - pointer to a matching rule
- expected_value - value we expect to get
- actual_value - value to match
- cascaded - if the matching rule has been cascaded from a parent. 0 == false, 1 == true
Safety¶
The matching rule pointer must be a valid pointer.
Source code in src/pact/v3/ffi.py
matching_rule_id(rule_result: MatchingRuleResult) -> int
¶
Return the ID of the matching rule.
The ID corresponds to the following rules:
Rule | ID |
---|---|
Equality | 1 |
Regex | 2 |
Type | 3 |
MinType | 4 |
MaxType | 5 |
MinMaxType | 6 |
Timestamp | 7 |
Time | 8 |
Date | 9 |
Include | 10 |
Number | 11 |
Integer | 12 |
Decimal | 13 |
Null | 14 |
ContentType | 15 |
ArrayContains | 16 |
Values | 17 |
Boolean | 18 |
StatusCode | 19 |
NotEmpty | 20 |
Semver | 21 |
EachKey | 22 |
EachValue | 23 |
Safety¶
This function is safe as long as the MatchingRuleResult pointer is a valid pointer and the iterator has not been deleted.