)]}'
{
  "commit": "b08be2b8563b7aefb1a1337d3070134cd2e43731",
  "tree": "4a80d38b40045f14056931fa82b5abf2d14131f7",
  "parents": [
    "aa35dd96e2270751ba9bbfaa51b2bafe0ae7fae2"
  ],
  "author": {
    "name": "Andrei Litvin",
    "email": "andy314@gmail.com",
    "time": "Tue Aug 05 16:51:35 2025 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Aug 05 16:51:35 2025 -0400"
  },
  "message": "Add an attribute persistence class to centralize attribute I/O. (#40311)\n\n* Add an attribute persistence class to centralize attribute I/O.\n\nThis adds type-safe methods around the AttributePersistenceProvider\nso that we work without raw bytes.\n\nThis was extracted out of the BasicInformation cluster updates as\na stand-alone PR. No flash cost yet because unused, but first\ncluster(s) to use these methods will start paying the cost.\n\n* Typo fixing\n\n* Split out code a bit, make it handle nulls better and separate out char and byte pascal string bits\n\n* Add/update unit tests\n\n* Use _span more\n\n* Use arithmetic instead of fundamental\n\n* Add test of value size not preserved for persistence\n\n* Restyle\n\n* Bug fix and add extra validation for strings being the right size\n\n* Fix some bugs, refactor and add tests\n\n* Restyle\n\n* Fix typo and add one more test\n\n* Fix comment\n\n* Fix doxy comments\n\n* Code simplification\n\n* Comment update\n\n* Remove 2021 from copyright - that was probably a wrong copy and paste\n\n* Fix includes\n\n* Correct the pascal string readability\n\n* Restyle\n\n* Update comments\n\n* Fix includes\n\n* Update src/app/persistence/AttributePersistence.cpp\n\nCo-authored-by: Tennessee Carmel-Veilleux \u003ctennessee.carmelveilleux@gmail.com\u003e\n\n* move tests to use the test persistent storage delegate\n\n* Remove all references to pascal string I/O in attribute persistence. I was asked to approach this differently\n\n* Start adding a String class that can be used to read/write values to persistent storage\n\n* Some comment updates\n\n* Unit test updates\n\n* Restyle\n\n* Review update\n\n* Remove assignment/copy for Strings\n\n* Add some casts\n\n* Update src/app/persistence/AttributePersistence.cpp\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Update src/app/persistence/String.h\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Update src/app/persistence/String.h\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Add additional check\n\n* Restyled by clang-format\n\n* Fix minimal condition\n\n* Update condition\n\n* Update comment\n\n* Update comments\n\n* Add null termination after read\n\n* Update unit tests\n\n* Update src/app/persistence/AttributePersistence.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Update src/app/persistence/AttributePersistence.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Address some review comments\n\n* Update src/app/persistence/PascalString.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Update src/app/persistence/String.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Update src/app/persistence/String.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Drop IsValidContent\n\n* More review comments\n\n* one more review comment\n\n* Update src/app/persistence/AttributePersistence.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Update src/app/persistence/String.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Update src/app/persistence/String.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Update src/app/persistence/AttributePersistence.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Update src/app/persistence/AttributePersistence.h\n\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e\n\n* Adapter renames for stringio\n\n* Fix include path\n\n* Fix include path\n\n---------\n\nCo-authored-by: Andrei Litvin \u003candreilitvin@google.com\u003e\nCo-authored-by: Tennessee Carmel-Veilleux \u003ctennessee.carmelveilleux@gmail.com\u003e\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: Restyled.io \u003ccommits@restyled.io\u003e\nCo-authored-by: Boris Zbarsky \u003cbzbarsky@apple.com\u003e",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "aaf50b19a321ac9444730c584e9a0f68b4abcfd8",
      "new_mode": 33188,
      "new_path": "src/app/persistence/AttributePersistence.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4762eec9e2c9eec6c163db937e004445c55ef5c6",
      "new_mode": 33188,
      "new_path": "src/app/persistence/AttributePersistence.h"
    },
    {
      "type": "modify",
      "old_id": "333ac2df09318d814c696a1d922ca16173a10c86",
      "old_mode": 33188,
      "old_path": "src/app/persistence/BUILD.gn",
      "new_id": "96869e0f65af7d6973c30fd4b41bf7b155c90602",
      "new_mode": 33188,
      "new_path": "src/app/persistence/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "25fb92a889535afe2190d9dc52cf6b529aa8c10b",
      "old_mode": 33188,
      "old_path": "src/app/persistence/PascalString.h",
      "new_id": "8b33d0d46690850714f6b0c001e94daf51e4df8f",
      "new_mode": 33188,
      "new_path": "src/app/persistence/PascalString.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2741bf55c902a79a1948ad1c9fd2bd51425d881f",
      "new_mode": 33188,
      "new_path": "src/app/persistence/String.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ad226f171eca7ae6a911cfe3d97286b02b32e002",
      "new_mode": 33188,
      "new_path": "src/app/persistence/String.h"
    },
    {
      "type": "modify",
      "old_id": "0f04f5d9c6860e7cb3f5eb0a16b10e625ae3ac6f",
      "old_mode": 33188,
      "old_path": "src/app/persistence/tests/BUILD.gn",
      "new_id": "b8f975e8bb544723588d6d8a69159e98ca0d649e",
      "new_mode": 33188,
      "new_path": "src/app/persistence/tests/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "28f38213510277cc8d4ab5b30477ce8fb0e18e5c",
      "new_mode": 33188,
      "new_path": "src/app/persistence/tests/TestAttributePersistence.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0e97713e20140e648bbdde36646829b48eb13ff4",
      "new_mode": 33188,
      "new_path": "src/app/persistence/tests/TestString.cpp"
    }
  ]
}
