Skip to content

Commit 06b2284

Browse files
committed
fix: add nullability to alias in bindings
1 parent be7c1cb commit 06b2284

File tree

5 files changed

+19
-18
lines changed

5 files changed

+19
-18
lines changed

include/plugify/binding.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ namespace plugify {
2424
[[nodiscard]] const std::string& GetName() const noexcept;
2525
[[nodiscard]] const std::string& GetMethod() const noexcept;
2626
[[nodiscard]] bool IsBindSelf() const noexcept;
27-
[[nodiscard]] const std::inplace_vector<Alias, Signature::kMaxFuncArgs>& GetParamAliases() const noexcept;
28-
[[nodiscard]] const Alias& GetRetAlias() const noexcept;
27+
[[nodiscard]] const std::inplace_vector<std::optional<Alias>, Signature::kMaxFuncArgs>& GetParamAliases() const noexcept;
28+
[[nodiscard]] std::optional<Alias> GetRetAlias() const noexcept;
2929

3030
// Setters (pass by value and move)
3131
void SetName(std::string name);
3232
void SetMethod(std::string method);
3333
void SetBindSelf(bool bindSelf);
34-
void SetParamAliases(std::inplace_vector<Alias, Signature::kMaxFuncArgs> paramAliases);
34+
void SetParamAliases(std::inplace_vector<std::optional<Alias>, Signature::kMaxFuncArgs> paramAliases);
3535
void SetRetAlias(Alias retAlias);
3636

3737
[[nodiscard]] bool operator==(const Binding& other) const noexcept;

schemas/plugin.schema.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@
411411
"type": "array",
412412
"description": "Optional array of aliases for the method's parameters. Each alias provides an alternative name for the corresponding parameter at that position. The array length must match the number of parameters in the referenced method (after bindSelf is applied). Use this to provide more meaningful or language-appropriate parameter names.",
413413
"items": {
414-
"type": "object",
414+
"type": ["object", "null"],
415415
"description": "An alias for a parameter with optional ownership semantics.",
416416
"required": ["name"],
417417
"properties": {
@@ -431,7 +431,7 @@
431431
"maxItems": 32
432432
},
433433
"retAlias": {
434-
"type": "object",
434+
"type": ["object", "null"],
435435
"description": "Optional alias for the return value. Provides an alternative name and ownership semantics for the value returned by this method. Useful for providing more meaningful or language-appropriate return value names in generated bindings.",
436436
"required": ["name"],
437437
"properties": {

src/core/binding.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ Binding& Binding::operator=(const Binding& other) {
2525
Binding& Binding::operator=(Binding&& other) noexcept = default;
2626

2727
// Static empty defaults for returning const references to empty containers
28-
static const std::inplace_vector<Alias, Signature::kMaxFuncArgs> emptyAliases;
29-
static const Alias emptyAlias;
28+
static const std::inplace_vector<std::optional<Alias>, Signature::kMaxFuncArgs> emptyAliases;
3029

3130
const std::string& Binding::GetName() const noexcept {
3231
return _impl->name;
@@ -40,12 +39,12 @@ bool Binding::IsBindSelf() const noexcept {
4039
return _impl->bindSelf.value_or(false);
4140
}
4241

43-
const std::inplace_vector<Alias, Signature::kMaxFuncArgs>& Binding::GetParamAliases() const noexcept {
42+
const std::inplace_vector<std::optional<Alias>, Signature::kMaxFuncArgs>& Binding::GetParamAliases() const noexcept {
4443
return _impl->paramAliases ? *_impl->paramAliases : emptyAliases;
4544
}
4645

47-
const Alias& Binding::GetRetAlias() const noexcept {
48-
return _impl->retAlias ? *_impl->retAlias : emptyAlias;
46+
std::optional<Alias> Binding::GetRetAlias() const noexcept {
47+
return _impl->retAlias;
4948
}
5049

5150
void Binding::SetName(std::string name) {
@@ -60,7 +59,7 @@ void Binding::SetBindSelf(bool bindSelf) {
6059
_impl->bindSelf = bindSelf;
6160
}
6261

63-
void Binding::SetParamAliases(std::inplace_vector<Alias, Signature::kMaxFuncArgs> paramAliases) {
62+
void Binding::SetParamAliases(std::inplace_vector<std::optional<Alias>, Signature::kMaxFuncArgs> paramAliases) {
6463
_impl->paramAliases = std::move(paramAliases);
6564
}
6665

src/core/binding_impl.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace plugify {
88
std::string name;
99
std::string method;
1010
std::optional<bool> bindSelf;
11-
std::optional<std::inplace_vector<Alias, Signature::kMaxFuncArgs>> paramAliases;
11+
std::optional<std::inplace_vector<std::optional<Alias>, Signature::kMaxFuncArgs>> paramAliases;
1212
std::optional<Alias> retAlias;
1313
};
1414
}

src/core/manifest.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -282,12 +282,14 @@ namespace {
282282
// Validate parameter aliases if present
283283
if (binding.paramAliases) {
284284
for (size_t i = 0; i < binding.paramAliases->size(); ++i) {
285-
if (auto result = ValidateAlias(
286-
*(*binding.paramAliases)[i]._impl,
287-
std::format("{}: Binding '{}' paramAlias[{}]", context, binding.name, i)
288-
);
289-
!result) {
290-
return result;
285+
if (auto alias = (*binding.paramAliases)[i]) {
286+
if (auto result = ValidateAlias(
287+
*alias->_impl,
288+
std::format("{}: Binding '{}' paramAlias[{}]", context, binding.name, i)
289+
);
290+
!result) {
291+
return result;
292+
}
291293
}
292294
}
293295
}

0 commit comments

Comments
 (0)