Skip to content

History / Entity value types

Revisions

  • Seven pages carried the same broken line, and nobody had ever built one The samples are compiled now (WikiSampleCompilationTests in tik4net.unittests), and the first run found six defects: * `new TikConnectionSetup(HOST, USER, PASS).setup.CreateXConnection()` - a stray receiver in the opening call, on all seven transport pages that have one. * `IpProxy.MaxSessions` does not exist; the example now uses MaxClientConnections and makes the point that survives - an assigned value equal to the declared default is still not sent. * The REST listen example invented `onAdded:` / `onChanged:` / `onDeleted:`. * `long? up = q.MaxLimit?.Upload` - each half of a TikRatePair is itself a TikDataRate, because a half can hold a word too. * Safe Mode showed `connection.SafeModeTake()` eight lines under a paragraph saying there is deliberately no such shim on a plain ITikConnection. * `Objects.Ip.IpAddress` compiles for nobody: a using-namespace directive imports a namespace's types, not its nested namespaces. Two conventions the check needs, both of which also tell the reader something: `<!-- no-compile: why -->` marks the 22 blocks that cannot compile by design - an elided body, one link of a fluent chain, code shown *because* it no longer compiles - and a second test fails if such a marker stops being needed. `<!-- sample-connection: ... -->` lets a page state what its snippets assume `connection` already is, which CRUD examples needed because it opens one ITikApiConnection at the top and continues from it. Also here: WinBox Native documents the two members its interface now declares (UseGuiNames, CatalogHandlerCount) and where the pre-Open mapping settings live; TikValue is deferred out of 4.0 with the reason and with what the shipped value types do and do not cover; the native transports are "experimental" on the roadmap too, matching what every other page has said all along.

    @danikf danikf committed Aug 29, 2026
  • Entity value types: the conversions normalise, and a word is not a gap Two things the page did not say. The implicit conversions keep the VALUE, not the spelling: TikDuration time = "10:00:00" comes back as "10h". That is the point of the type -- both spellings are one value and compare equal, and ToString() writes the form every transport accepts -- but it means these must never be compared as strings, and the page now shows that with the example rather than leaving it to be discovered. And the part the type only just learned: 'none' is a router STATE, while text we cannot read is a gap in tik4net, and they used to be the same Token. Kind now separates Value / Special / Unknown; Special is a typed enum, so a check is `lease.Special == TikDurationSpecial.None` rather than a string comparison, and a write is FromSpecial(...) rather than a spelling at the call site. Unknown still round-trips verbatim but raises a note on the new value.token trace channel -- documented in the channel table -- because a token that behaves perfectly is exactly how a missing word stays missing. Also: a bare word in a rate pair applies to both halves. It used to become "unlimited/0", which is a configuration the router never reported.

    @danikf danikf committed Aug 29, 2026
  • Entity reference, value types and helpers: the coverage a reader could not see Three pages for the part of the library the wiki named once and never listed. Entity-reference answers one question -- is my menu covered, and what is the class called -- for a reader who already knows RouterOS. No field descriptions, no per-entity prose: a table per top-level menu, and five markers explained once at the top instead of repeated per row (singleton, read-only, ordered, live counters, has helpers). The table is GENERATED from the [TikEntity] attributes and guarded by a unit test in the code repo, so it cannot quietly fall behind; what reflection cannot know is hand-written around it -- why the four *-server singletons refuse =detail=, and that wireless and wifi are two drivers the router chooses between, not two spellings. It also says how to guess a class name without the table, and what to do when the answer is no, which is the case the page most needs to handle well. Entity-value-types gives TikDuration, TikDataRate, TikRatePair and TikRouterAddress a home outside the page you visit to WRITE an entity -- every reader of the built-in ones meets these types. Each one leads with the RouterOS spelling it corresponds to, per transport, because that divergence is why the type exists: 5s vs 00:00:05, 1000000 vs 1M vs 1Gbps, 1000000/2000000 vs 1M/2M. Entity-helpers collects the 17 verbs that are not CRUD, grouped by what you would be doing in WinBox rather than by which class they live on. Home's breadth claim now carries its evidence (169 menus, linked), and High-level-API-entities becomes the hub that reaches all three.

    @danikf danikf committed Aug 29, 2026