## unicode-org/icu4x — x/ffi/2021-10-27…x/ffi/2022-01-12

_161+ commits._

### Features
- **Add padding/truncation to FFI (#1501)** (51c9f46)
- **Add FFI for constructing Data Structs, including decimal data structs (#1497)** (f8f05c2)
- **Add API for padding to a minimum number of decimal digits (#1482)** (c6a9402)
- **Add -Ccodegen-units=1 (#1492)** (247b113)
- **Add EitherCart and rename Yoke ZCF constructors (#1484)** (ef4125d)
- **Add FFI for constructing fixed decimals from float (#1483)** (96601c9)
- **Add ForkByKeyProvider, first multi-source data provider (#1463)** (9fdbd62)
- **Add boilerplate to new ListFormatter example (#1465)** (0f71033)
- **Add back the empty data provider hook in FFI (#1466)** (11290a0)
- **Add EitherProvider and rename IterableDataProviderCore to IterableProvider (#1455)** (7d9f89f)
- **Add categories to yoke and zerovec (#1451)** (fe67c68)
- **Add ZeroMap2d, a two-dimensional zero-copy map (#1432)** (6b66b28)
- **Add various helper functions to zerovec (#1430)** (4f4ba6e)
- **Using new list data invariants (#1434)** (0c1f751)
- **Add build scripts in Cargo.toml for cargo vendor. (#1424)** (f4fee42)
- **Add missing license block in segmenter. (#1420)** (7769518)
- **Add Grapheme segmenter that is a part of UAX29. (#1388)** (e82c1fb)
- **Add precompute benches for VZV, prefix all ZeroVecLike methods with `zvl_` (#1412)** (8328551)
- **Add a resolve_components method to DateTimeFormat (#1362)** (5c7c7fd)
- **Add ZeroSlice and VarZeroSlice, move ZeroVec functionality to ZeroSlice and add Deref (#1371)** (782f623)
- **Add LineBreakSegmenter and rewire code to use it (#1387)** (5002e70)
- **Add (so far unused) Japanese era data (#1375)** (290e46c)
- **Coalesce more impls into the new BufferProvider framework (#1384)** (0a9aea9)
- **Add ZeroVecULE, make VarULE impl of `[T: ULE]` work on reflexive ULEs (#1357)** (3418070)
- **Year of week-of-year support (#1206)** (a0f78c5)
- **Add GC predicate functions (#1310)** (910cf45)
- **Add extend_from_litemap to LiteMap (#1340)** (d7e2d1b)
- **Extend DateTimeFormat to support other calendars (#1339)** (919d6f0)
- **Add PartialEq, Debug, Clone impls to ZeroMap (#1332)** (9258d05)
- **Add Default impls for all zerovec types (#1330)** (c78b611)
- **Add missing Serde/Yoke impls to ZeroVec crate (#1328)** (a96c0aa)
- **Add StaticDataProvider create_empty (#1314)** (6c25706)
- **Add Buddhist calendar data to testdata (#1308)** (46e82e7)
- **Homogenize yoke generic impls to always work with Yokeable, add OwnedYokeable (#1302)** (f2a5bf5)
- **Add Buddhist calendar calculations (#1305)** (1c296f0)
- **Add CodePointTrie and ZeroVec conversion methods (#1291)** (0845aa1)
- **Add double-to-decimal for FixedDecimal via ryū (#1217)** (8a99635)
- **Add borrowed-only version of ZeroMap (#1238)** (615570c)
- **Add EncodeAsVarULE for ZeroVec (#1274)** (c88c6fe)
- **add pad and padded to FixedDecimal (#1195)** (11288c3)
- **Add missing dependency version numbers** (dc5ff31)

### Fixes
- **Fix bug for time-zones provider specific variants (#1405)** (899c90f)
- **Fix license header check script (#1423)** (061017f)
- **Fix EncodeAsVarULE for ZeroVec (#1407)** (3f2a96a)
- **Remove workaround for rustc bug after upstream fix (#1402)** (5217972)
- **calendars: fix offset handling around month boundaries (#1352)** (65fef9e)
- **Fix typo in Yokeable documentation (#1386)** (7e1d77e)
- **Fix item 5 in the VarULE checklist (#1295)** (33d441c)
- **Fix diplomat regen (#1289)** (b2c9317)
- **Fix up some intra doc links (#1288)** (771b837)
- **Fix maximize function (#1171)** (027c190)
- **Fix typo in datagen docs (#1222)** (b51dccd)
- **Fix PairULE validation function (#1266)** (899d8cd)

### Backend
- **Update diplomat (#1502)** (e8c682d)
- **Remove Yokeable::Output from ZeroCopyFrom trait (#1499)** (57c44dd)
- **Update diplomat (#1498)** (821af5a)
- **Wire DataProvider into LineBreakSegmenter (#1446)** (07e35af)
- **Make most Yokeable impls inline (#1493)** (8b26c19)
- **Update FDF FFI to use DiplomatResult (#1491)** (f7d0366)
- **Fixing test without --all-features (#1489)** (cf216a8)
- **Retrieve localized metazone info from timeZoneNames.json (#1354)** (89ce5f0)
- **Write design doc for yoke (#1459)** (66fe4b7)
- **Update diplomat (#1478)** (7e0f127)
- **Using regex_automata in `ListFormatter` (#1435)** (794fa7e)
- **Julian calendar (#1351)** (d87058a)
- **Skip node_modules in license header check (#1454)** (625b0f9)
- **Remove almost empty and unused package-lock.json file from root directory. (#1469)** (0521917)
- **ListFormatter example (#1456)** (714acbd)
- **Change Writeable::writeable_to_string to return a Cow (#1452)** (59edff5)
- **Re-write DataError to be Copy and use logging (#1449)** (4b8496d)
- **Update Diplomat (#1447)** (4bbbabc)
- **Remove SmallStr and recommend Cow<str> (#1417)** (d9cd587)
- **Port UCharsTrie (#1264)** (1a87cea)
- **Update nightly to 2021-12-22 (#1442)** (27ee712)
- **Fuzz testing integer Writeable (#1421)** (7eda44f)
- **Rewriting ListFormatter to only use appends (#1395)** (5cfbb17)
- **Update line break table per Unicode 14.0 (#1419)** (b7bb533)
- **Move BorrowedVariant to ZeroVecLike (#1429)** (9e7e218)
- **Make icu_segmenter be no_std with lstm feature disabled (#1425)** (0a44ceb)
- **Implementing Writeable for all integers (#1408)** (e96204e)
- **Refactor VZV code to center on (and Deref to) VarZeroSlice; make VZVBorrowed private (#1418)** (66b2081)
- **Construct VZVs and use as_encoded_bytes instead of the static function (#1411)** (988f246)
- **Change DataRequest to be borrowed in BufferProvider (#1416)** (355487a)
- **Rename PlainOldULE to RawBytesULE (#1413)** (55aeb88)
- **Fail gracefully when building provider_fs on alternate platforms (#1414)** (a679997)
- **Improve EncodeAsVarULE (#1385)** (da07d1d)
- **Implement the Japanese calendar (#1394)** (e165d22)
- **Making writeable::LengthHint a range (#1400)** (20b8206)
- **Rename resource key category for properties (#1406)** (294c66f)
- **Implement data transformer for Script_Extensions map data (#1353)** (685622e)
- **Swapping arguments of assert_writeable_eq (#1399)** (a471739)
- **Making ListFormatterPattern construction more private (#1398)** (f3db253)
- **Rename enums for General_Category (#1355)** (bea61e5)
- **Adding size hints to ListFormatter buffer initialization (#1390)** (472900f)
- **Implement the Canonical_Combining_Class property (#1347)** (b081f84)
- **constrain zcf on T: 'static (#1392)** (6fac854)
- **Simplify ZeroVec/VarZeroVec error handling, consolidate ULEError type (#1389)** (7ae1e6d)
- **Change break_iterator_impl macro to use a helper trait (#1380)** (61620c5)
- **Enable test-c-tiny in CI (#1382)** (560dd8e)
- **Moving deduplicating_array to its own crate (#1364)** (eae3099)
- **Replace SerdeDeDataProvider with BufferProvider (#1369)** (1d9ddad)
- **Adding special case data for es and he list formatting (#1365)** (64c3859)
- **Using a trait for FormattedString (#1345)** (fd504b0)
- **Implement word segmenter using rule based segmenter (#1273)** (7d77438)
- **Custom fallbacks (#1309)** (bc9c9ff)
- **Install (and cache) grcov before loading overridden coverage toolchain (#1359)** (bffe5ba)
- **Replace Vec with LiteMap in locale canoicalizer (#1275)** (dc414a8)
- **Update principles.md to reflect current reality (#1335)** (e5a49da)
- **Implement era formatting (#1346)** (fcf248c)
- **Remove attach_to_option_cart() (#1348)** (fd5eb4b)
- **Include era symbol information in data (#1344)** (c7db080)
- **ZeroVec::clone_from_slice --> ZeroVec::alloc_from_slice (#1343)** (b42c359)
- **Remove DataPayloadInner and migrate to a single Yoke type (#1342)** (92dbabd)
- **Migrate the various map impls in the CLDR transformer to LiteMap (#1341)** (7418270)
- **Create TimeZoneFormatConfig enum (#1256)** (6edc9d4)
- **Move CLDR JSON structs to central location and other refactoring (#1337)** (d683334)
- **Migrate StaticDataProvider and BlobDataProvider to ZeroMap (#1058)** (9d0137c)
- **Bump zerovec to 0.5 (#1336)** (ca2dd56)
- **Allow cloning_zcf to be applied to individual variants or fields (#1307)** (08f539e)
- **Simplify ZeroMapKV (#1334)** (1c5901f)
- **Handle serialization of tuples (etc) in litemaps (#1306)** (a0a6596)
- **Update data model for non-gregorian calendars (#1300)** (608fbd4)
- **Remove RcStruct (#1299)** (cee2b5f)
- **Tooling fixes (#1298)** (ef64777)
- **Initial Properties FFI (#1269)** (242fa55)
- **Get rid of the lifetime on DataPayload/DataProvider/DataExporter (#1297)** (cfc5fda)
- **Implement East_Asian_Width and Line_Break Unicode properties (#1280)** (bcba2fb)
- **Switch PluralRules Data to ZeroVec (#1240)** (e5da8ba)
- **Document ULE alignment guarantee; update all impls with checklists (#1294)** (89508d9)
- **Impl Debug/PartialEq on PairULE (#1287)** (fe24e7b)
- **Update tutorial to include uprops data (#1286)** (92abc78)
- **Fixes for icu4x-datagen for Unicode properties (#1285)** (1ed5781)
- **Burn DataMarker::Cart down with fire (#1279)** (c6857ec)
- **Deduplicating list formatter data (#1276)** (fd2515c)
- **Unify handling of TOML in uprops provider (#1254)** (052c398)
- **Move ErasedDataStruct to the owned variant of DataPayload (#1278)** (0fe7189)
- **Providers (#1218)** (e127523)
- **Change anyhow to eyre (#1268)** (4fbf81c)
- **Handle exponents in FixedDecimal::from_str() (#1265)** (74e74a3)
- **Update roadmap.md** (d18ba05)
- **Reorder LineBreakRule's enum values (#1263)** (04b902b)
- **Implement Grapheme_Cluster_Break, Word_Break, and Sentence_Break Unicode properties (#1233)** (0c855b1)
- **Update version numbers for ICU4X 0.4 (#1252)** (1b4dd62)
- **Bump yoke-derive in preparation for release (#1253)** (e8b3853)
- **Update utils in preparation for release (#1249)** (6975267)
- **Document utils release process (#1250)** (c68d73b)
- **Updating CHANGELOG for ICU4X 0.4** (9892697)
- **Speed up icu4x-datagen by pre-loading data in icu_provider_uprops (#1244)** (e71aa54)
- **Design doc: locale fallback and negotiation (#1237)** (bf4b5df)
- **Update to CLDR 40 (#1216)** (0df5de3)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/unicode-org/icu4x?utm_source=github-action)._