yangtools.git
12 months agoDo not leak SuppressFBWarnings from UnresolvedQName 99/106299/2
Robert Varga [Tue, 30 May 2023 21:56:42 +0000 (23:56 +0200)]
Do not leak SuppressFBWarnings from UnresolvedQName

Encapsulate SpotBugs-sensitive operations in a non-public class so that
we do not leak that annotation to the outside world.

Change-Id: I82b3b2795c68416fe7e4c4e1eae707358daefae3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote YangNamespaceContext 97/106297/1
Robert Varga [Tue, 30 May 2023 21:09:36 +0000 (23:09 +0200)]
Promote YangNamespaceContext

This is a stable interface, update its API and promote it to non-@Beta.

Change-Id: I236e3b4bf4343362e32e0c291f5ef87d07b45713
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote YangNames 96/106296/1
Robert Varga [Tue, 30 May 2023 20:53:54 +0000 (22:53 +0200)]
Promote YangNames

This class has been around the block, it no longer is @Beta.

Change-Id: I6bb8ecd1630203a6e53d338e7d8c4699be7657a9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote YangVersion 95/106295/1
Robert Varga [Tue, 30 May 2023 20:52:53 +0000 (22:52 +0200)]
Promote YangVersion

Clean up method names and promote the class from @Beta to production
status.

Change-Id: I48ee0f74ae5a14151abfe7a00618182480e22eae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote dedicated YANG types 94/106294/1
Robert Varga [Tue, 30 May 2023 20:44:03 +0000 (22:44 +0200)]
Promote dedicated YANG types

Uint{8,16,32,64} and Decimal64 are widely used an work, they are no
longer @Beta.

Change-Id: Ifbd67dfa9a017ffd7255046f32e22c6ef859b3b4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote rfc6536-model-api 93/106293/1
Robert Varga [Tue, 30 May 2023 20:40:52 +0000 (22:40 +0200)]
Promote rfc6536-model-api

The interfaces here are stable, not @Beta.

Change-Id: I877dc8bfe328989034512522eb77217ae7e31499
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote YangParserTestUtils 92/106292/1
Robert Varga [Tue, 30 May 2023 20:38:28 +0000 (22:38 +0200)]
Promote YangParserTestUtils

These utilities are widely used, not deserving of @Beta anymore.

Change-Id: I57fb39ec7f976b432d0a97d9cc360eaa27a2f527
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote rfc6241-parser-support 91/106291/1
Robert Varga [Tue, 30 May 2023 20:37:20 +0000 (22:37 +0200)]
Promote rfc6241-parser-support

The interfaces here are no longer @Beta.

Change-Id: I41a133a7cd8e9489556beaf4e6962f64d7c60d52
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote rfc6241-model-api 90/106290/1
Robert Varga [Tue, 30 May 2023 20:35:22 +0000 (22:35 +0200)]
Promote rfc6241-model-api

The interfaces are long past @Beta state, promote them.

Change-Id: Ib08c564dc06970665d3d8379a659f774f39c54eb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote ByteBufUtils 89/106289/1
Robert Varga [Tue, 30 May 2023 20:27:56 +0000 (22:27 +0200)]
Promote ByteBufUtils

This class is stable enough to not be @Beta, drop the annotation.

Change-Id: I72ac661ae6a1c4c106f60516af4394e778e32604
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove @Beta from yang-data-codec-gson 88/106288/1
Robert Varga [Tue, 30 May 2023 20:26:26 +0000 (22:26 +0200)]
Remove @Beta from yang-data-codec-gson

The interfaces here are stable enough, drop @Beta annotations.

Change-Id: I11e5479c49af2911790b1f4913ea65dada3d6789
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoBump odlparent to 13.0.0 73/106273/4
Robert Varga [Tue, 30 May 2023 11:25:15 +0000 (13:25 +0200)]
Bump odlparent to 13.0.0

Adopt latest odlparent, adjusting dependencies to explicitly pull in
annotations we are using, as they are no longer provided.

Change-Id: I0cfec9a9e79590d9d3e3fff84afdb6f4bb457c69
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote SemVer to non-Beta 59/106259/6
Robert Varga [Tue, 30 May 2023 09:49:02 +0000 (11:49 +0200)]
Promote SemVer to non-Beta

Convert the class into a record and drop the @Beta annotation.

Change-Id: I7dd23a22e34bf5484a4463814f50f7a13cea935f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoExpand SemVerTest 80/106280/3
Robert Varga [Tue, 30 May 2023 18:02:42 +0000 (20:02 +0200)]
Expand SemVerTest

Add explicit tests for serialization.

Change-Id: I20b9388f1c9ee17597fd954f694651b20427804b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove unneeded FutureCallback type 75/106275/2
Robert Varga [Tue, 30 May 2023 15:02:48 +0000 (17:02 +0200)]
Remove unneeded FutureCallback type

We do not need to specify EffectiveModelContext, which also fixes an
Eclipse warning.

Change-Id: I3033abf79b70182f767a8672efff6a2c53bee37c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoPromote ClassLoaderUtils 62/106262/2
Robert Varga [Tue, 30 May 2023 10:00:15 +0000 (12:00 +0200)]
Promote ClassLoaderUtils

Drop @Beta annotations and eliminate all the loadClass() methods, as
they are no longer used.

Change-Id: I87b20a27990656651a16646539f7471ee7581544
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDrop @Beta from ItemOrder 61/106261/2
Robert Varga [Tue, 30 May 2023 09:53:10 +0000 (11:53 +0200)]
Drop @Beta from ItemOrder

Promote this interface to production status.

Change-Id: Ic51ab79b10cf73f40bf9cf3d072a100092b65cc7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDrop @Beta from NoOp{Listener,Object}Registration 60/106260/2
Robert Varga [Tue, 30 May 2023 09:50:57 +0000 (11:50 +0200)]
Drop @Beta from NoOp{Listener,Object}Registration

These classes are designed okay, drop @Beta annotation.

Change-Id: Iaebd7956ba6d10ff30f0bebe1cf73270c692949e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoModernize DataTreeCandidateNode API 17/106217/3
Robert Varga [Sun, 28 May 2023 20:54:25 +0000 (22:54 +0200)]
Modernize DataTreeCandidateNode API

Use @Nullable/@NonNull properties aligned with record naming and
deprecate all the get*() methods.

JIRA: YANGTOOLS-1513
Change-Id: If7179fcc025d351ad339f3570495d41c524ce994
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoBump odlparent to 12.0.6 68/106168/1
Robert Varga [Fri, 26 May 2023 14:54:14 +0000 (16:54 +0200)]
Bump odlparent to 12.0.6

Pick up latest upgrades from upstream.

Change-Id: I5f8ccbd6769a3ef3a550cd5aab435fd9ec93f8b5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMigrate YANG inputs for yang-data-api 35/106035/3
matus.matok [Thu, 18 May 2023 13:54:12 +0000 (15:54 +0200)]
Migrate YANG inputs for yang-data-api

Migrated all YANG testfiles counting 50 lines or less.

JIRA: YANGTOOLS-1506
Change-Id: Ib274b98ff58e79f2c3a84d222c17c9b2f21b3d99
Signed-off-by: matus.matok <matus.matok@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMigrate YANG inputs for yang-data-codec-binfmt 83/105883/7
matus.matok [Thu, 18 May 2023 12:46:00 +0000 (14:46 +0200)]
Migrate YANG inputs for yang-data-codec-binfmt

Migrated all YANG testfiles counting 50 lines or less.

JIRA: YANGTOOLS-1506
Change-Id: I2cb5778ccdc7edc1ae7eece1a79c716928a0655c
Signed-off-by: matus.matok <matus.matok@pantheon.tech>
12 months agoSimplify Bug5396Test 10/106110/1
Robert Varga [Sun, 21 May 2023 18:51:17 +0000 (20:51 +0200)]
Simplify Bug5396Test

Read the entire directory, not just one yang file. Fixes Eclipse in some
setups.

Change-Id: I5ccdaf1e5c1ab54a8fd6bb9dc1c2de6338f94897
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoAdd support for parsing JSON NormalizedYangData 76/106076/4
Robert Varga [Sat, 20 May 2023 14:43:07 +0000 (16:43 +0200)]
Add support for parsing JSON NormalizedYangData

This adds the basic tools and a simple test for parsing yang-data when
the inference stack points to it.

JIRA: YANGTOOLS-1472
Change-Id: If27ec5c36f3686324f5ec66c9ea5a920a3c0a509
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDisconnect MountPointData from Identifiable 08/106108/3
Robert Varga [Sun, 21 May 2023 15:12:24 +0000 (17:12 +0200)]
Disconnect MountPointData from Identifiable

We use the label just as a property -- rather than promulgating
getIdentifier(), use a simple label() method.

Change-Id: Ib0bdee0322808e9a91515cc208a05288dc044096
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up and deprecate ContainerSchemaNodes 07/106107/3
Robert Varga [Sun, 21 May 2023 15:04:04 +0000 (17:04 +0200)]
Clean up and deprecate ContainerSchemaNodes

We have a internal class defined here in two parts. Merge them together.
Also removing indexing of notification's children --
NotificationDefinition already provides that functionality.

Finally deprecate the entire class, as OperationDefinition and
NotificationDefinition already provide the contracts here -- but make a
note on compatibility.

Change-Id: Ia8164a8900a827bb07a47b4899551e343cddc48b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoBridge {Notification,Operation}Definition to ContainerLike 06/106106/3
Robert Varga [Sun, 21 May 2023 14:41:05 +0000 (16:41 +0200)]
Bridge {Notification,Operation}Definition to ContainerLike

We have overlapping interfaces dealing with the same thing --
{Notification,Operation}AsContainer and ContainerSchemaNodes. Hide the
former and unify the RPC operation provider.

Also increase visibility of these utilities by integrating them directly
into base interfaces.

Change-Id: Ib5c45785b2886a4c5f9c7b0393abe52259beefab
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDo not be fancy with OperationAsContainer 05/106105/1
Robert Varga [Sun, 21 May 2023 14:26:58 +0000 (16:26 +0200)]
Do not be fancy with OperationAsContainer

There is no point to also implement OperationDefition, users always
should choose either this class or delegate (they are supplying) to talk
to the appropriate aspect.

Change-Id: Ibe695a7c7df8c16b4565a0b2e522d786958449dc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up OperationAsContainer 04/106104/1
Robert Varga [Sun, 21 May 2023 14:19:41 +0000 (16:19 +0200)]
Clean up OperationAsContainer

input/output are always present, use an ImmutableList with two entries.

Change-Id: If7ae9a5f2f8335b68934b58156f072897067db96
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up ContainerSchemaNodes 03/106103/1
Robert Varga [Sun, 21 May 2023 14:11:01 +0000 (16:11 +0200)]
Clean up ContainerSchemaNodes

The classes here overlap with AbstractAsContainer. Move common methods
to base class and reorder to make comparing them easier.

Change-Id: I517f76b9284381b10386a1e205da8d922ed051a9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoAdd AbstractNodeDataWithSchema.of(DataSchemaNode) 02/106102/1
Robert Varga [Sun, 21 May 2023 13:50:58 +0000 (15:50 +0200)]
Add AbstractNodeDataWithSchema.of(DataSchemaNode)

Centralize allocation of schema in a static factory method, allowing
us to hide individual constructors.

Change-Id: Idbb4b1d1712b2f048457cfcc31f8641fdc64bc6d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove NormalizedNodeWriter.childSizeHint() 00/106100/1
Robert Varga [Sun, 21 May 2023 13:16:39 +0000 (15:16 +0200)]
Remove NormalizedNodeWriter.childSizeHint()

Individual nodes are exposing a direct size() method, use that instead
of examining the body.

Change-Id: I0328dbefede85c2f5cd72b6e112f6ab07a14be29
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoModernize BinaryValue/UniqueValues 98/106098/1
Robert Varga [Sun, 21 May 2023 11:42:47 +0000 (13:42 +0200)]
Modernize BinaryValue/UniqueValues

Use instanceof patterns to reduce explicit casts.

Change-Id: Icb287b18c62839f5e94951befffb2d20ac038bae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoAdd DataSchemaContextTree.childByPath() 97/106097/1
Robert Varga [Sun, 21 May 2023 11:31:50 +0000 (13:31 +0200)]
Add DataSchemaContextTree.childByPath()

Going through Optional is nice, but the structure of users lends itself
to using @Nullable as well.

JIRA: YANGTOOLS-1413
Change-Id: I49e217a4c66a29093a94dc1eab45b788b834c79b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRename DataSchemaContextNode to DataSchemaContext 96/106096/3
Robert Varga [Sun, 21 May 2023 10:52:56 +0000 (12:52 +0200)]
Rename DataSchemaContextNode to DataSchemaContext

Drop the 'Node' suffix, as it quite overloaded.

JIRA: YANGTOOLS-1413
Change-Id: I68931049b215239bca1a3382c879200a3e801c4b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up DataSchemaContextNode.Composite 95/106095/2
Robert Varga [Sun, 21 May 2023 10:22:56 +0000 (12:22 +0200)]
Clean up DataSchemaContextNode.Composite

Fix naming of methods to be consistent with the rest our codebase. Also
document behaviour and eliminate duplicate code.

JIRA: YANGTOOLS-1413
Change-Id: I31bdd01a8bcb2ab8046bdbe7880a422c1e2e8dc0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up DataSchemaContextNode naming 94/106094/1
Robert Varga [Sun, 21 May 2023 00:51:29 +0000 (02:51 +0200)]
Clean up DataSchemaContextNode naming

Rename package to data.util.impl.model and shorten class names (now that
there are fewer of them and there is less confusion).

JIRA: YANGTOOLS-1413
Change-Id: I64491af21ae559a2b59606801cbe8bf964c50ba2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove AbstractListItemContextNode 93/106093/3
Robert Varga [Sun, 21 May 2023 00:19:12 +0000 (02:19 +0200)]
Remove AbstractListItemContextNode

We can unify ListItemContextNode and MapItemContextNode by pushing path
argument instantiation down to callers.

JIRA: YANGTOOLS-1413
Change-Id: Ic1d39c4775e4b4499984976f9faa1ad08faa5c92
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoSplit out DataSchemaContextNode.Composite 92/106092/3
Robert Varga [Sun, 21 May 2023 00:03:58 +0000 (02:03 +0200)]
Split out DataSchemaContextNode.Composite

Reduce the number of possible implementations of getChild()/enterChild()
by encapsulating them in a specialized interface.

JIRA: YANGTOOLS-1413
Change-Id: Ib3817ee143c99a0f3ba30bea6c2a9aa3b961749c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove superfluous method overrides 91/106091/1
Robert Varga [Sat, 20 May 2023 23:19:12 +0000 (01:19 +0200)]
Remove superfluous method overrides

Having getChild() in the abstract base is completely unnecessary -- we
already have sealed the hierarchy.

JIRA: YANGTOOLS-1413
Change-Id: I2acf6fd4bd1abba6caad5c104d3b3e4058753b8d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoSeal DataSchemaContextNode hierarchy 90/106090/1
Robert Varga [Sat, 20 May 2023 23:16:25 +0000 (01:16 +0200)]
Seal DataSchemaContextNode hierarchy

The individual implementations are limited to yang-data-util, make sure
we express that through sealing the class hierarchy.

JIRA: YANGTOOLS-1413
Change-Id: Ib7dc132718f8f246d9a2b9ae2d982974dc049295
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoReconcile pathArgument() and isKeyedEntry() 89/106089/1
Robert Varga [Sat, 20 May 2023 23:06:18 +0000 (01:06 +0200)]
Reconcile pathArgument() and isKeyedEntry()

We have a tad of a mess here. isKeyedEntry() is really indicating
whether the pathArgument() is useable. Merge the logic to enable sane
operation:
- pathStep() returns @Nullable NodeIdentifier, effectively acting as
  !isKeyedEntry()
- getPathStep() returns a @NonNull NodeIdentifier or throws.

Based on this, update PathMixin, which is now guaranteed to return a
NodeIdentifier (by deferring to getPathStep()).

JIRA: YANGTOOLS-1413
Change-Id: Ic7f566d37cf0867122a472e879b2665624d5bc74
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoEliminate DataSchemaContextNode.isLeaf() 88/106088/5
Robert Varga [Sat, 20 May 2023 20:56:04 +0000 (22:56 +0200)]
Eliminate DataSchemaContextNode.isLeaf()

This method has a rather unfortunate name, as it covers LeafNode and
LeafSetEntryNode. Capture the property as a marker interface,
SimpleValue, reducing confusion and the number of methods.

JIRA: YANGTOOLS-1413
Change-Id: Ia21cc07226d3a64a27f4cb3b88d8817472b28b8b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoEliminate Any{Xml,data}ContextNode 87/106087/6
Robert Varga [Sat, 20 May 2023 20:36:23 +0000 (22:36 +0200)]
Eliminate Any{Xml,data}ContextNode

The two sublasses are not bringing anything to the table: merge them
into OpaqueContextNode.

JIRA: YANGTOOLS-1413
Change-Id: If6b2ec841ee96912d6f77cf24193a42c36db1658
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoSimplify AbstractLeafContextNode 86/106086/6
Robert Varga [Sat, 20 May 2023 20:31:49 +0000 (22:31 +0200)]
Simplify AbstractLeafContextNode

There is no point in requiring generics, squash them to simplify they
way this abstract class works.

JIRA: YANGTOOLS-1413
Change-Id: I1568ec703f5aa8620cff416b4aff8679046d171b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoReduce reliance on pathArgument() 85/106085/6
Robert Varga [Sat, 20 May 2023 20:18:19 +0000 (22:18 +0200)]
Reduce reliance on pathArgument()

PathArguments are computed from schema, hence we can derive the QName
from DataSchemaNode directly. Also expose the field to package, so that
we can differentiate internal and external accesses more easily.

JIRA: YANGTOOLS-1413
Change-Id: I3a5c20b2c50e32145daf97b177ae33d94b2e476d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoSimplify *List* context nodes 84/106084/6
Robert Varga [Sat, 20 May 2023 20:02:10 +0000 (22:02 +0200)]
Simplify *List* context nodes

Ordered/Unordered specializations do not make a difference at the end of
the day. Also we have a 'List'/'Map' parlance which is not exposed to
the outside world. Clean this up, eliminating two classes in the
process.

JIRA: YANGTOOLS-1413
Change-Id: Ief920ece71809c7d6134b73ed49bf532652dfdd5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoAdd DataSchemaContextNode.PathMixin 83/106083/6
Robert Varga [Sat, 20 May 2023 19:41:37 +0000 (21:41 +0200)]
Add DataSchemaContextNode.PathMixin

Remove isMixin() which provides a dummy boolean. We introduce PathMixin,
which guarantees a PathArgument without relying on
DataSchemaContextNode.pathArgument().

Partially seal the implementation hierarchy, making it clear that
PathMixin cannot be freely mixed in by random outsiders -- it really is
only provided by AbstractMixinContextNode.

This also makes it clear that all mixins are NodeIdentifiers, so we
centralize their creation in AbstractMixinContextNode.

JIRA: YANGTOOLS-1413
Change-Id: Ie834ac288658cebe3363ae051f004db4b0a7df75
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRefactor DataSchemaContextNode 81/106081/10
Robert Varga [Sat, 20 May 2023 17:19:29 +0000 (19:19 +0200)]
Refactor DataSchemaContextNode

Turn the class into an interface, moving all implementation methods into
a new, hidden AbstractDataSchemaContextNode. The abstract class also
loses its generic argument, as we just do not care about the PathArgument
type.

JIRA: YANGTOOLS-1413
Change-Id: I1eb21b0f8991e58f64897547883ae67367408e4f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDisconnect DataSchemaContextNode from Identifiable 82/106082/3
Robert Varga [Sat, 20 May 2023 18:46:00 +0000 (20:46 +0200)]
Disconnect DataSchemaContextNode from Identifiable

Split out getIdentifier() into an explicit pathArgument() method, so
that we can hunt down and migrate user.

JIRA: YANGTOOLS-1463
Change-Id: Ibf823e7a783b166fefa1607b0d82dd191978d9eb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoUse DataSchemaNode's QName 80/106080/3
Robert Varga [Sat, 20 May 2023 18:38:43 +0000 (20:38 +0200)]
Use DataSchemaNode's QName

Now that we always have a DataSchemaNode in DataSchemaContextNode, we
can ditch indirection through PathArgument.getType().

Change-Id: Ibdccd7168ecdf4190a39c5ce14554beeafdd0d61
JIRA: YANGTOOLS-568
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up DataSchemaContextNode a bit 79/106079/3
Robert Varga [Sat, 20 May 2023 17:00:54 +0000 (19:00 +0200)]
Clean up DataSchemaContextNode a bit

Now that we do not have AugmentationContextNode, we know the
dataSchemaNode is non-null. Lock that down and also address a few other
FIXMEs.

JIRA: YANGTOOLS-568
Change-Id: Ie2fc089c971eb9a0f6830aa4657b2ff478731888
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoLock down AbstractNodeDataWithSchema 78/106078/3
Robert Varga [Sat, 20 May 2023 16:45:45 +0000 (18:45 +0200)]
Lock down AbstractNodeDataWithSchema

We are about to reign in NodeDataWithSchema. Lock down the hierarchy and
instantiation points.

Change-Id: Ia1f2b11b760293ff811ffd1657447f2d25f42dbf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove NormalizedNodeSchemaUtils.findCorrespondingAugment() 77/106077/1
Robert Varga [Sat, 20 May 2023 15:02:17 +0000 (17:02 +0200)]
Remove NormalizedNodeSchemaUtils.findCorrespondingAugment()

We do not have augmentations anymore, hence we should not care about the
placement of nodes in augmentations.

JIRA: YANGTOOLS-568
Change-Id: Idd36024255d7745d09983cbc15a25f7c08e27cac
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoIntroduce AnnotationName 75/106075/3
Robert Varga [Sat, 20 May 2023 12:48:55 +0000 (14:48 +0200)]
Introduce AnnotationName

We have data-facing construct names captured in yang-common, do the same
for RFC7952 annotations, introducing AnnotationName.

Change-Id: Iaedd0a8c76edf5f3927bd5d4d56723dd47a84d1e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMigrate RFC references to rfc-editor.org 72/106072/2
Robert Varga [Sat, 20 May 2023 12:17:19 +0000 (14:17 +0200)]
Migrate RFC references to rfc-editor.org

Mass-migrate references to rfc-editor.org, which is the new place where
RFCs live.

Change-Id: Idd4288f3e6381dbcfaa7527de48c246ec5d55efb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoFix getDeclared() nullness warning 74/106074/2
Robert Varga [Sat, 20 May 2023 12:57:22 +0000 (14:57 +0200)]
Fix getDeclared() nullness warning

We are promising non-null, make sure we carry that annotation.

Change-Id: I48767119da236aee708f99fecf11de11a9632123
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDocument MountPointLabel 73/106073/2
Robert Varga [Sat, 20 May 2023 12:30:14 +0000 (14:30 +0200)]
Document MountPointLabel

Add a reference to the specification this class models.

Change-Id: Iae736e05c835c216d343c7e93809d186e698abf8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMove MountPointLabel to yang-common 70/106070/3
Robert Varga [Sat, 20 May 2023 10:45:50 +0000 (12:45 +0200)]
Move MountPointLabel to yang-common

We have YangDataName in yang-common, MountPointLabel is very similar.
Co-locate them for sharing.

Change-Id: I4e3747f5ee4b0dd68f3f83dbb9df58e165313383
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoYangDataName should be a WritableObject 71/106071/1
Robert Varga [Sat, 20 May 2023 10:59:59 +0000 (12:59 +0200)]
YangDataName should be a WritableObject

We want to be able to serialize these efficiently, make sure it is a
WritableIdentifier. Also improve intern() logic.

Change-Id: I5d052970e7258c8bf142d242f32b2adb6d203bc4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoFix openconfig-parser-support dependencies 69/106069/1
Robert Varga [Sat, 20 May 2023 10:32:28 +0000 (12:32 +0200)]
Fix openconfig-parser-support dependencies

We are using concepts here, fix that up.

Change-Id: Ib281ababf0aa80d6b4ac074e711ca3a32f519b4a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove unneeded dependencies 68/106068/1
Robert Varga [Sat, 20 May 2023 10:30:03 +0000 (12:30 +0200)]
Remove unneeded dependencies

We are not using concepts in model extensions. remove them.

Change-Id: I0238406683c1080fa0ef745138f896bfe91e49d9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoOptimize MandatoryLeafEnforcer footprint 62/106062/6
Robert Varga [Thu, 18 May 2023 22:28:55 +0000 (00:28 +0200)]
Optimize MandatoryLeafEnforcer footprint

Instead of using internal YangInstanceIdentifiers, which have overhead,
keep simple ImmutableList<PathArgument> -- and wire to a more direct
alternative of findNode().

Change-Id: Icfdf5424a1478db0b45515f43df8406ae7527c3d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoModernize YangInstanceIdentifier 63/106063/7
Robert Varga [Fri, 19 May 2023 00:32:55 +0000 (02:32 +0200)]
Modernize YangInstanceIdentifier

Ever since we ditched eager hashCode computation we can do much better
in terms of outside interface. Introduce of()  methods as replacements
for create() with much better flexibility.

Change-Id: Ie6a431deaca0a80b8ce1d16dad5a1b919c94f722
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove MandatoryDescendant 61/106061/1
Robert Varga [Thu, 18 May 2023 22:12:02 +0000 (00:12 +0200)]
Remove MandatoryDescendant

We no longer have to deal with augmentations: hence we just need to
keep YangInstanceIdentifiers to descendants.

JIRA: YANGTOOLS-568
Change-Id: Ica2ca74660f5e5a0367bb9f67e3a2550eed9f883
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoFix yang-data-tree-ri dependencies 60/106060/1
Robert Varga [Thu, 18 May 2023 21:59:34 +0000 (23:59 +0200)]
Fix yang-data-tree-ri dependencies

We have a few warnings, fix them up.

Change-Id: I3232911509b6c291b8ba2077b6cac3ea15fa8b93
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up yang-data-codec-xml dependencies 59/106059/1
Robert Varga [Thu, 18 May 2023 21:54:54 +0000 (23:54 +0200)]
Clean up yang-data-codec-xml dependencies

Clean up most of the dependency warnings we have.

Change-Id: I2cdfbb3b67be88731aed05d9dfa1887feed16c19
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoFix yang-data-codec-gson dependencies 58/106058/1
Robert Varga [Thu, 18 May 2023 21:49:34 +0000 (23:49 +0200)]
Fix yang-data-codec-gson dependencies

We have a few warnings about used dependencies, clean them up.

Change-Id: I3f6f5c574ef60bcc5d6c18a9b7617afe5182a5b1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up yang-data-util dependencies 57/106057/1
Robert Varga [Thu, 18 May 2023 21:46:43 +0000 (23:46 +0200)]
Clean up yang-data-util dependencies

We use rfc8528-model-api and do not use yang-parser-api. Fix that up.

Change-Id: I7f9d2b625e4ec598df66e9cad7c9d01f3097c101
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoHide ImmutableNormalizedAnydata 56/106056/1
Robert Varga [Thu, 18 May 2023 21:27:10 +0000 (23:27 +0200)]
Hide ImmutableNormalizedAnydata

The two implementations here are extremely simple: hide them behind
(Metadata)NormalizedAnydata.of() static factory method.

Change-Id: I383b4eac35b96c75d7c0001c508a747a9456087f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMove NormalizedMetadataWriter to yang-data-api 55/106055/1
Robert Varga [Thu, 18 May 2023 21:08:08 +0000 (23:08 +0200)]
Move NormalizedMetadataWriter to yang-data-api

As noted in the FIXME, move this class along with the decorator
to yang-data-api.

JIRA: YANGTOOLS-1489
Change-Id: I8cd05221457bbfd2e1674eb5812c95f575b5e325
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMove /ImmutableNormalizedMountPoint(s) 54/106054/1
Robert Varga [Thu, 18 May 2023 21:01:16 +0000 (23:01 +0200)]
Move /ImmutableNormalizedMountPoint(s)

These are immutable implementations, move them to yang-data-impl.

Change-Id: If6930c73252f2d21b74ee8da245d5cb38e054149
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRename ImmutableNormalizedMetadataStreamWriter 53/106053/1
Robert Varga [Thu, 18 May 2023 20:55:05 +0000 (22:55 +0200)]
Rename ImmutableNormalizedMetadataStreamWriter

This is just an extension implementation. Rename it to
ImmutableMetadataExtension and move it to yang-data-impl -- pulling
ImmutableNormalizedMetadata with it.

Change-Id: Ib04fa21edf36147b06de64099cb09953ef0d35e3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoNormalizedMetadata is not Identifiable 52/106052/1
Robert Varga [Thu, 18 May 2023 20:42:21 +0000 (22:42 +0200)]
NormalizedMetadata is not Identifiable

We are going for a place where the root node, and hence the top-level
NormalizedMetadata is does not have a PathArgument. Eliminate the idea
that there is a getIdentifier(), reflecting the design of
NormalizedMountpoints back.

JIRA: NETCONF-1472
Change-Id: I5bab85a933bf3bc4d63d41db081c9399d3e13894
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoAdd NormalizedYangData 46/106046/6
Robert Varga [Thu, 18 May 2023 17:12:31 +0000 (19:12 +0200)]
Add NormalizedYangData

RFC8040 yang-data extension is unlike any other piece of data we
normalize, as it has its own identifier -- which does not match
UnresolvedQName.Unqualified, but rather is captured in YangDataName.

This forms the first such piece of data, but realistically we have a
number of others -- like datastore root, RPC input, RPC output,
notification -- all of which are now overloaded to ContainerNode.

For now introduce NormalizedData as the construct above NormalizedNode,
which does not imply a PathArgument being present -- i.e. pulling
contract(), name() and body() from NormalizedNode.

Add NormalizedYangData, which has its own contract and has a single
DataContainerChild as its body.

JIRA: YANGTOOLS-1472
Change-Id: I7ba989b181ac1bdab8117053233c58f5d40a084f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoImprove type safety of AbstractImmutableDataContainerNode 50/106050/1
Robert Varga [Thu, 18 May 2023 19:49:03 +0000 (21:49 +0200)]
Improve type safety of AbstractImmutableDataContainerNode

Now that DataContainerNode's children are only keyed by NodeIdentifier,
we can improve type safety of our maps -- removing the need for a
verify.

JIRA: YANGTOOLS-1511
Change-Id: I9ea336c52f78c1ac8d73f9bee104bffc13d7d317
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDisconnect NormalizedNode from Identifiable 47/106047/4
Robert Varga [Thu, 18 May 2023 18:48:59 +0000 (20:48 +0200)]
Disconnect NormalizedNode from Identifiable

getIdentifier() is a mouthful and we will be introducing a superclass
above NormalizedNode, which will use plain Identifier. This renders
the entire Identifiable capture moot.

Introduce NormalizedNode.name(), which returns the same thing, removing
dependency on Identifiable, but still keeping getIdentifier() as a
deprecated method.

JIRA: YANGTOOLS-1472
Change-Id: I5a1f8ca5150c105775dccbf1c21ee9da6908bc10
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoYangInstanceIdentifier.PathArgument is an identifier 49/106049/1
Robert Varga [Thu, 18 May 2023 18:45:29 +0000 (20:45 +0200)]
YangInstanceIdentifier.PathArgument is an identifier

This class is Immutable and Serializable, plus overrides
hashCode()/equals()/toString() and it is used as an argument to
Identifiable in NormalizedNode.

It should properly implement concepts.Identifier, forming a proper
component of a HierarchicalIdentifier.

JIRA: YANGTOOLS-1472
Change-Id: I5481a969f44bb5d3cdd1ae1d024b40616ccc6a66
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoFix yang-data-api dependencies 48/106048/1
Robert Varga [Thu, 18 May 2023 18:35:54 +0000 (20:35 +0200)]
Fix yang-data-api dependencies

We only require yang-model-spi, not yang-model-util.

Change-Id: Ifebcd5e73bbdf71e51297a51c36b98453f58fd24
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDeprecate MixinNode for removal 45/106045/2
Robert Varga [Thu, 18 May 2023 17:00:15 +0000 (19:00 +0200)]
Deprecate MixinNode for removal

MixinNode has strong ties to XML encoding. Seal it to enumerate exactly
which end-user contract it matches and deprecate it for removal.

JIRA: YANGTOOLS-1512
Change-Id: Ib9f6a98ffc10aba6216134ed59e5ee35bdd94607
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoSeal OrderedNodeContainer 44/106044/1
Robert Varga [Thu, 18 May 2023 16:46:29 +0000 (18:46 +0200)]
Seal OrderedNodeContainer

OrderedNodeContainer should only be implemented with the three
specializations we already have. Previous sealing of DataContainerChild
allows us to also seal OrderedNodeContainer.

JIRA: YANGTOOLS-1511
Change-Id: Ic214f6c42dc3c57be509c528ced9dfd87a18a0d8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoSeal DataContainerChild 43/106043/1
Robert Varga [Thu, 18 May 2023 16:39:23 +0000 (18:39 +0200)]
Seal DataContainerChild

Only a small set of interfaces is allowed to implement
DataContainerChild, make sure we seal the hierarchy.

JIRA: YANGTOOLS-1511
Change-Id: I188ba92ef10624970920798d91f5fa98aee6e02b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDataContainerChild is identified by NodeIdentifier 42/106042/2
Robert Varga [Thu, 18 May 2023 16:12:12 +0000 (18:12 +0200)]
DataContainerChild is identified by NodeIdentifier

With AugmentationNode/MountPointNode gone, it is clear that all
DataContainerChild interfaces are identified by NodeIdentifier. Codify
that in DataContainerChild and adjust DataContainerNode specialization
accordingly.

JIRA: YANGTOOLS-1511
Change-Id: Ide80a1e84cf7851f94fe5d71c43865922bb9d9ad
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoEliminate AbstractPathArgument 29/106029/2
Robert Varga [Thu, 18 May 2023 10:03:22 +0000 (12:03 +0200)]
Eliminate AbstractPathArgument

We have sealed PathArgument, which makes it obvious we can just combine
it with AbstractPathArgument. Combine the two, making the class
hierarchy more transparent.

Change-Id: Id7befcd7f11bbd7ab6f27224cc58e7b029d33063
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up PotassiumNode 28/106028/2
Robert Varga [Thu, 18 May 2023 09:32:53 +0000 (11:32 +0200)]
Clean up PotassiumNode

The node constants are not accurate -- sort them with anyxml being
the highest currently-defined constant. This leaves us three more
values available.

JIRA: YANGTOOLS-568
Change-Id: I622b2bbb49ee3a6269e6183dc438283be4c935b7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoImprove PotassiumPathArgument encoding 27/106027/2
Robert Varga [Thu, 18 May 2023 09:12:23 +0000 (11:12 +0200)]
Improve PotassiumPathArgument encoding

As it turns out we have only three different PathArgument types, which
means we can shift one bit towards encoding of size. This allows us to
encode up to 12 path arguments directly.

JIRA: YANGTOOLS-568
Change-Id: Ic3cd1c4e349e5f2d3c2e66a069ab5b0033c16d5c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoClean up Potassium{Node,PathArgument} a bit 26/106026/2
Robert Varga [Thu, 18 May 2023 09:00:08 +0000 (11:00 +0200)]
Clean up Potassium{Node,PathArgument} a bit

Potassium does not have AugmentationIdentifier nor MountPointIdentifier.
Remove these constants and all their users. Also ensure we split the
readLegacyPathArgument implementations.

JIRA: YANGTOOLS-568
Change-Id: I8e743b248723aec77a5e01c3523a41ac8d86dcf4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoImprove Decimal64 coding 25/106025/2
Robert Varga [Thu, 18 May 2023 08:42:26 +0000 (10:42 +0200)]
Improve Decimal64 coding

We are defining the Potassium output format, make sure we do not use
Strings to encode Decimal64, just plain binary -- up to 9 bytes.

JIRA: YANGTOOLS-568
Change-Id: If0f42d0b16594fd3ed6703277d41e547ef197302
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDefine Potassium{Node,PathArgument,Value} 24/106024/2
Robert Varga [Thu, 18 May 2023 08:32:55 +0000 (10:32 +0200)]
Define Potassium{Node,PathArgument,Value}

Before we further evolve the serialization format, make sure we have
a stable reference forked from Magnesium tokens.

JIRA: YANGTOOLS-568
Change-Id: I2e1c76f13becfdb6f40c965b8a4edefac51ae2eb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDefine NormalizedNodeStreamVersion.POTASSIUM 86/104486/15
Robert Varga [Thu, 18 May 2023 08:17:51 +0000 (10:17 +0200)]
Define NormalizedNodeStreamVersion.POTASSIUM

With the demise of AugmentationIdentifier we can no longer restore
previous NormalizedNode, as we just do not have the prerequisite
information.

This patch defines a new stream version, essentially the same as
Magnesium. This format will be further evolved.

JIRA: YANGTOOLS-568
Change-Id: Ibb81fb2980c156e61d9535017cc4fae65a10fbb6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove Augmentation{Identifier,Node} 08/102908/26
Robert Varga [Thu, 27 Oct 2022 21:25:28 +0000 (23:25 +0200)]
Remove Augmentation{Identifier,Node}

These two are an ugly leak from binding world into yang.data.api. Purge
them with fire. The only remnants are in yang-data-codec-binfmt, which
now defines a LegacyAugmentationIdentifier utility to expose the legacy
format to end users.

JIRA: YANGTOOLS-568
Change-Id: Ib3b9182253ec7d42598b6a174a67c48191d9ed5b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoEliminate AbstractMagnesiumDataOutput 23/106023/1
Robert Varga [Thu, 18 May 2023 08:03:10 +0000 (10:03 +0200)]
Eliminate AbstractMagnesiumDataOutput

We only support Magnesium output rendering the superclass moot.

JIRA: YANGTOOLS-568
Change-Id: I3b5c79bcbeb2bf5330d39c60dd4ad1de81a51629
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRename NormalizedTree to NormalizedTuple 20/106020/1
Robert Varga [Thu, 18 May 2023 06:35:25 +0000 (08:35 +0200)]
Rename NormalizedTree to NormalizedTuple

'NormalizedTree' has more implications than we would like. Also the
layout lends itself of any level of indirection, so let's just call it a
NormalizedTuple.

JIRA: YANGTOOLS-1172
Change-Id: I6680154ace0d8d56fc5bcd2368405e20792bf8dd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoEliminate rfc8528-data-util 18/106018/2
Robert Varga [Wed, 17 May 2023 17:49:06 +0000 (19:49 +0200)]
Eliminate rfc8528-data-util

Move the remaining classes to yang-data-util, completing the baseline
integration.

JIRA: YANGTOOLS-1172
Change-Id: I946b41a6ff200576578cce25386646433e2e8a8d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMove MountPointNormalizedNodeWriter 17/106017/2
Robert Varga [Wed, 17 May 2023 17:28:20 +0000 (19:28 +0200)]
Move MountPointNormalizedNodeWriter

Mount points are inherently integrated into NormalizedNodeWriter,
co-locate it with its baseline interface.

JIRA: YANGTOOLS-1172
Change-Id: I0c99bcde7c9ec086b9b01987b17ea4206680a5fe
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDocument NormalizedTree 16/106016/2
Robert Varga [Wed, 17 May 2023 17:13:52 +0000 (19:13 +0200)]
Document NormalizedTree

This interface lacks javadocs, add rudimentary documentation.

JIRA: YANGTOOLS-1172
Change-Id: Ib5fec7455ab447762263d0e7069433026987e1b3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove MountPointIdentifier 15/106015/3
Robert Varga [Wed, 17 May 2023 16:17:45 +0000 (18:17 +0200)]
Remove MountPointIdentifier

Remove MountPointIdentifier as the last remnant of rfc8528-data-api.
This forces an adjustment to yang-data-codec-binfmt, which can no longer
read this PathArgument.

It also allows us to seal YangInstanceIdentifier.PathArgument, not
allowing any external implementations of it.

JIRA: YANGTOOLS-1172
Change-Id: Ibdbb5d2eb9d63f3d0e8a95065e8124ce6818a7af
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agocreateTestContainer() can be static 14/106014/1
Robert Varga [Wed, 17 May 2023 16:39:38 +0000 (18:39 +0200)]
createTestContainer() can be static

This is minor note from Eclipse, fix iit.

Change-Id: Ia96b1ccf2ea6d7c605b2f1e62660521c23055f68
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoEliminate MountPointNode 08/106008/5
Robert Varga [Tue, 16 May 2023 23:36:25 +0000 (01:36 +0200)]
Eliminate MountPointNode

Switch mount points from being in-line to being out-of-line just as
NormalizedMetadata is. This allows users to explicitly manage the
lifecycle -- preventing accidental leaks to NormalizedNode hierarchy.

This introduces NormalizedTree as a top-level construct, which holds
NormalizedNode, NormalizedMetadata and NormalizedMountpoints.

JIRA: YANGTOOLS-1172
Change-Id: I523afc166c5532be8db928a3b3288cac266ed3e6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoReduce MountPointIdentifier proliferation 11/106011/1
Robert Varga [Wed, 17 May 2023 11:34:31 +0000 (13:34 +0200)]
Reduce MountPointIdentifier proliferation

Use MountPointLabel instead of MountPointIdentifier.

JIRA: YANGTOOLS-1172
Change-Id: I1f63053815cedb2cb781f206ff63f815ce56f478
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>