datetime handling for gleam

new interval module, updated zones

+34
.github/workflows/release.yml
··· 1 + name: release 2 + 3 + on: 4 + push: 5 + tags: ['v*'] 6 + 7 + jobs: 8 + publish: 9 + runs-on: ubuntu-latest 10 + 11 + steps: 12 + - uses: actions/checkout@v4 13 + - uses: erlef/setup-beam@v1 14 + with: 15 + otp-version: '26' 16 + gleam-version: '1.0' 17 + 18 + - run: | 19 + version="v$(cat gleam.toml | grep -m 1 "version" | sed -r "s/version *= *\"([[:digit:].]+)\"/\1/")" 20 + if [ "$version" != "${{ github.ref_name }}" ]; then 21 + echo "tag '${{ github.ref_name }}' does not match the version in gleam.toml" 22 + echo "expected a tag name 'v$version'" 23 + exit 1 24 + fi 25 + name: check version 26 + 27 + - run: gleam format --check 28 + 29 + - run: gleam test 30 + 31 + - run: gleam publish -y 32 + env: 33 + HEXPM_USER: ${{ secrets.HEXPM_USER }} 34 + HEXPM_PASS: ${{ secrets.HEXPM_PASS }}
+2 -2
.github/workflows/test.yml
··· 13 13 - uses: actions/checkout@v4 14 14 - uses: erlef/setup-beam@v1 15 15 with: 16 - otp-version: '25' 17 - gleam-version: '0.34' 16 + otp-version: '26' 17 + gleam-version: '1.0' 18 18 rebar3-version: '3' 19 19 - run: gleam test 20 20 - run: gleam format --check src test
+2 -2
gleam.toml
··· 1 1 name = "birl" 2 - version = "1.5.0" 2 + version = "1.6.0" 3 3 4 4 description = "Date / Time handling for Gleam" 5 5 gleam = ">= 0.32.0" ··· 10 10 11 11 [dependencies] 12 12 ranger = "~> 1.1" 13 - gleam_stdlib = "~> 0.34 or ~> 1.0" 13 + gleam_stdlib = "~> 0.36 or ~> 1.0" 14 14 15 15 [dev-dependencies] 16 16 gleeunit = "~> 1.0"
+2 -2
manifest.toml
··· 2 2 # You typically do not need to edit this file 3 3 4 4 packages = [ 5 - { name = "gleam_stdlib", version = "0.34.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "1FB8454D2991E9B4C0C804544D8A9AD0F6184725E20D63C3155F0AEB4230B016" }, 5 + { name = "gleam_stdlib", version = "0.36.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "C0D14D807FEC6F8A08A7C9EF8DFDE6AE5C10E40E21325B2B29365965D82EB3D4" }, 6 6 { name = "gleeunit", version = "1.0.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "D364C87AFEB26BDB4FB8A5ABDE67D635DC9FA52D6AB68416044C35B096C6882D" }, 7 7 { name = "ranger", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "ranger", source = "hex", outer_checksum = "28E615AE7590ED922AF1510DDF606A2ECBBC2A9609AF36D412EDC925F06DFD20" }, 8 8 ] 9 9 10 10 [requirements] 11 - gleam_stdlib = { version = "~> 0.34 or ~> 1.0" } 11 + gleam_stdlib = { version = "~> 0.36 or ~> 1.0" } 12 12 gleeunit = { version = "~> 1.0" } 13 13 ranger = { version = "~> 1.1" }
+123 -135
src/birl.gleam
··· 68 68 now, 69 69 offset_in_minutes * 60_000_000, 70 70 option.map(timezone, fn(tz) { 71 - case 72 - zones.list 73 - |> list.any(fn(item) { item.0 == tz }) 74 - { 75 - True -> option.Some(tz) 76 - False -> option.None 77 - } 78 - }) 79 - |> option.flatten, 71 + case list.any(zones.list, fn(item) { item.0 == tz }) { 72 + True -> option.Some(tz) 73 + False -> option.None 74 + } 75 + }) 76 + |> option.flatten, 80 77 option.Some(monotonic_now), 81 78 ) 82 79 } ··· 102 99 } 103 100 104 101 pub fn now_with_timezone(timezone: String) -> Result(Time, Nil) { 105 - case 106 - zones.list 107 - |> list.key_find(timezone) 108 - { 102 + case list.key_find(zones.list, timezone) { 109 103 Ok(offset) -> { 110 104 let now = ffi_now() 111 105 let monotonic_now = ffi_monotonic_now() ··· 284 278 /// 285 279 /// - `19051222T16:38-3` -> `1905-12-22T16:38:00.000-03:00` 286 280 /// 281 + /// - `2019-03-26 14:30:00.9Z` -> `2019-03-26T14:30:00.900Z` 282 + /// 287 283 /// - `2019-03-26T14:00:00.9Z` -> `2019-03-26T14:00:00.900Z` 284 + /// 285 + /// - `1905-12-22 16:38:23-3` -> `1905-12-22T16:38:23.000-03:00` 288 286 /// 289 287 /// - `2019-03-26T14:00:00,4999Z` -> `2019-03-26T14:00:00.499Z` 290 288 /// ··· 296 294 let value = string.trim(value) 297 295 298 296 use #(day_string, offsetted_time_string) <- result.then(case 299 - [string.split(value, "T"), string.split(value, "t")] 297 + string.split(value, "T"), 298 + string.split(value, "t"), 299 + string.split(value, " ") 300 300 { 301 - [[day_string, time_string], _] | [_, [day_string, time_string]] -> 302 - Ok(#(day_string, time_string)) 303 - [[_], [_]] -> Ok(#(value, "00")) 304 - _ -> Error(Nil) 301 + [day_string, time_string], _, _ 302 + | _, [day_string, time_string], _ 303 + | _, _, [day_string, time_string] -> Ok(#(day_string, time_string)) 304 + [_], [_], [_] -> Ok(#(value, "00")) 305 + _, _, _ -> Error(Nil) 305 306 }) 306 307 307 308 let day_string = string.trim(day_string) ··· 332 333 333 334 let time_string = string.replace(time_string, ":", "") 334 335 use #(time_string, milli_seconds_result) <- result.then(case 335 - [string.split(time_string, "."), string.split(time_string, ",")] 336 + string.split(time_string, "."), 337 + string.split(time_string, ",") 336 338 { 337 - [[_], [_]] -> { 339 + [_], [_] -> { 338 340 Ok(#(time_string, Ok(0))) 339 341 } 340 - [[time_string, milli_seconds_string], [_]] 341 - | [[_], [time_string, milli_seconds_string]] -> { 342 + [time_string, milli_seconds_string], [_] 343 + | [_], [time_string, milli_seconds_string] -> { 342 344 Ok(#( 343 345 time_string, 344 346 milli_seconds_string 345 - |> string.slice(0, 3) 346 - |> string.pad_right(3, "0") 347 - |> int.parse, 347 + |> string.slice(0, 3) 348 + |> string.pad_right(3, "0") 349 + |> int.parse, 348 350 )) 349 351 } 350 352 351 - _ -> Error(Nil) 353 + _, _ -> Error(Nil) 352 354 }) 353 355 354 356 case milli_seconds_result { ··· 392 394 let assert Ok(offset_pattern) = regex.from_string("(.*)([+|\\-].*)") 393 395 394 396 let time_string = case 395 - [string.starts_with(value, "T"), string.starts_with(value, "t")] 397 + string.starts_with(value, "T"), 398 + string.starts_with(value, "t") 396 399 { 397 - [True, _] | [_, True] -> string.drop_left(value, 1) 398 - _ -> value 400 + True, _ | _, True -> string.drop_left(value, 1) 401 + _, _ -> value 399 402 } 400 403 401 404 use #(time_string, offset_string) <- result.then(case ··· 414 417 let time_string = string.replace(time_string, ":", "") 415 418 416 419 use #(time_string, milli_seconds_result) <- result.then(case 417 - [string.split(time_string, "."), string.split(time_string, ",")] 420 + string.split(time_string, "."), 421 + string.split(time_string, ",") 418 422 { 419 - [[_], [_]] -> { 423 + [_], [_] -> { 420 424 Ok(#(time_string, Ok(0))) 421 425 } 422 - [[time_string, milli_seconds_string], [_]] 423 - | [[_], [time_string, milli_seconds_string]] -> { 426 + [time_string, milli_seconds_string], [_] 427 + | [_], [time_string, milli_seconds_string] -> { 424 428 Ok(#( 425 429 time_string, 426 430 milli_seconds_string 427 - |> string.slice(0, 3) 428 - |> string.pad_right(3, "0") 429 - |> int.parse, 431 + |> string.slice(0, 3) 432 + |> string.pad_right(3, "0") 433 + |> int.parse, 430 434 )) 431 435 } 432 - 433 - _ -> Error(Nil) 436 + _, _ -> Error(Nil) 434 437 }) 435 438 436 439 case milli_seconds_result { ··· 452 455 value: String, 453 456 ) -> Result(#(TimeOfDay, String), Nil) { 454 457 let time_string = case 455 - [string.starts_with(value, "T"), string.starts_with(value, "t")] 458 + string.starts_with(value, "T"), 459 + string.starts_with(value, "t") 456 460 { 457 - [True, _] | [_, True] -> string.drop_left(value, 1) 458 - _ -> value 461 + True, _ | _, True -> string.drop_left(value, 1) 462 + _, _ -> value 459 463 } 460 464 461 465 let time_string = string.replace(time_string, ":", "") 462 466 463 467 use #(time_string, milli_seconds_result) <- result.then(case 464 - [string.split(time_string, "."), string.split(time_string, ",")] 468 + string.split(time_string, "."), 469 + string.split(time_string, ",") 465 470 { 466 - [[_], [_]] -> { 471 + [_], [_] -> { 467 472 Ok(#(time_string, Ok(0))) 468 473 } 469 - [[time_string, milli_seconds_string], [_]] 470 - | [[_], [time_string, milli_seconds_string]] -> { 474 + [time_string, milli_seconds_string], [_] 475 + | [_], [time_string, milli_seconds_string] -> { 471 476 Ok(#( 472 477 time_string, 473 478 milli_seconds_string 474 - |> string.slice(0, 3) 475 - |> string.pad_right(3, "0") 476 - |> int.parse, 479 + |> string.slice(0, 3) 480 + |> string.pad_right(3, "0") 481 + |> int.parse, 477 482 )) 478 483 } 479 - 480 - _ -> Error(Nil) 484 + _, _ -> Error(Nil) 481 485 }) 482 486 483 487 case milli_seconds_result { ··· 540 544 let value = string.trim(value) 541 545 542 546 use #(day_string, time_string) <- result.then(case 543 - [string.split(value, "T"), string.split(value, "t")] 547 + string.split(value, "T"), 548 + string.split(value, "t"), 549 + string.split(value, " ") 544 550 { 545 - [[day_string, time_string], [_]] | [[_], [day_string, time_string]] -> 546 - Ok(#(day_string, time_string)) 547 - [[_], [_]] -> Ok(#(value, "00")) 548 - _ -> Error(Nil) 551 + [day_string, time_string], _, _ 552 + | _, [day_string, time_string], _ 553 + | _, _, [day_string, time_string] -> Ok(#(day_string, time_string)) 554 + [_], [_], [_] -> Ok(#(value, "00")) 555 + _, _, _ -> Error(Nil) 549 556 }) 550 557 551 558 let day_string = string.trim(day_string) ··· 561 568 Ok(#( 562 569 time_string, 563 570 milli_seconds_string 564 - |> string.slice(0, 3) 565 - |> string.pad_right(3, "0") 566 - |> int.parse, 571 + |> string.slice(0, 3) 572 + |> string.pad_right(3, "0") 573 + |> int.parse, 567 574 )) 568 575 569 576 _ -> Error(Nil) ··· 702 709 [day_string, month_string, year_string, time_string, offset_string] -> { 703 710 let time_string = string.replace(time_string, ":", "") 704 711 case 705 - #( 706 - int.parse(day_string), 707 - month_strings 708 - |> list.index_map(fn(month, index) { 709 - let strings = month.1 710 - #(index, strings.0, strings.1) 711 - }) 712 - |> list.find(fn(month) { 713 - month.1 == month_string || month.2 == month_string 714 - }), 715 - int.parse(year_string), 716 - parse_time_section(time_string), 717 - ) 712 + int.parse(day_string), 713 + list.index_map(month_strings, fn(month, index) { 714 + let strings = month.1 715 + #(index, strings.0, strings.1) 716 + }) 717 + |> list.find(fn(month) { 718 + month.1 == month_string || month.2 == month_string 719 + }), 720 + int.parse(year_string), 721 + parse_time_section(time_string) 718 722 { 719 - #( 720 - Ok(day), 721 - Ok(#(month_index, _, _)), 722 - Ok(year), 723 - Ok([hour, minute, second]), 724 - ) -> 723 + Ok(day), Ok(#(month_index, _, _)), Ok(year), Ok([hour, minute, second]) -> 725 724 case 726 725 from_parts( 727 726 #(year, month_index + 1, day), ··· 745 744 } 746 745 Error(Nil) -> Error(Nil) 747 746 } 748 - _ -> Error(Nil) 747 + _, _, _, _ -> Error(Nil) 749 748 } 750 749 } 751 750 ··· 754 753 [day_string, month_string, year_string] -> { 755 754 let time_string = string.replace(time_string, ":", "") 756 755 case 757 - #( 758 - int.parse(day_string), 759 - month_strings 760 - |> list.index_map(fn(month, index) { 761 - let strings = month.1 762 - #(index, strings.0, strings.1) 763 - }) 764 - |> list.find(fn(month) { 765 - month.1 == month_string || month.2 == month_string 766 - }), 767 - int.parse(year_string), 768 - parse_time_section(time_string), 769 - ) 756 + int.parse(day_string), 757 + list.index_map(month_strings, fn(month, index) { 758 + let strings = month.1 759 + #(index, strings.0, strings.1) 760 + }) 761 + |> list.find(fn(month) { 762 + month.1 == month_string || month.2 == month_string 763 + }), 764 + int.parse(year_string), 765 + parse_time_section(time_string) 770 766 { 771 - #( 772 - Ok(day), 773 - Ok(#(month_index, _, _)), 774 - Ok(year), 775 - Ok([hour, minute, second]), 776 - ) -> 767 + Ok(day), Ok(#(month_index, _, _)), Ok(year), Ok([ 768 + hour, 769 + minute, 770 + second, 771 + ]) -> 777 772 case 778 773 from_parts( 779 774 #(year, month_index + 1, day), ··· 800 795 } 801 796 Error(Nil) -> Error(Nil) 802 797 } 803 - _ -> Error(Nil) 798 + _, _, _, _ -> Error(Nil) 804 799 } 805 800 } 806 801 _ -> Error(Nil) 807 802 } 808 - 809 803 _ -> Error(Nil) 810 804 } 811 805 } ··· 826 820 let Time(wall_time: wta, offset: _, timezone: _, monotonic_time: mta) = a 827 821 let Time(wall_time: wtb, offset: _, timezone: _, monotonic_time: mtb) = b 828 822 829 - let #(ta, tb) = case #(mta, mtb) { 830 - #(option.Some(ta), option.Some(tb)) -> #(ta, tb) 831 - _ -> #(wta, wtb) 823 + let #(ta, tb) = case mta, mtb { 824 + option.Some(ta), option.Some(tb) -> #(ta, tb) 825 + _, _ -> #(wta, wtb) 832 826 } 833 827 834 - case #(ta == tb, ta < tb) { 835 - #(True, _) -> order.Eq 836 - #(_, True) -> order.Lt 837 - #(_, False) -> order.Gt 828 + case ta == tb, ta < tb { 829 + True, _ -> order.Eq 830 + _, True -> order.Lt 831 + _, False -> order.Gt 838 832 } 839 833 } 840 834 ··· 842 836 let Time(wall_time: wta, offset: _, timezone: _, monotonic_time: mta) = a 843 837 let Time(wall_time: wtb, offset: _, timezone: _, monotonic_time: mtb) = b 844 838 845 - let #(ta, tb) = case #(mta, mtb) { 846 - #(option.Some(ta), option.Some(tb)) -> #(ta, tb) 847 - _ -> #(wta, wtb) 839 + let #(ta, tb) = case mta, mtb { 840 + option.Some(ta), option.Some(tb) -> #(ta, tb) 841 + _, _ -> #(wta, wtb) 848 842 } 849 843 850 844 duration.Duration(ta - tb) ··· 1090 1084 } 1091 1085 1092 1086 pub fn set_timezone(value: Time, new_timezone: String) -> Result(Time, Nil) { 1093 - case 1094 - zones.list 1095 - |> list.key_find(new_timezone) 1096 - { 1087 + case list.key_find(zones.list, new_timezone) { 1097 1088 Ok(new_offset_number) -> { 1098 1089 case value { 1099 1090 Time(wall_time: t, offset: _, timezone: _, monotonic_time: mt) -> ··· 1192 1183 wall_time, 1193 1184 offset_in_minutes * 60_000_000, 1194 1185 option.map(timezone, fn(tz) { 1195 - case 1196 - zones.list 1197 - |> list.any(fn(item) { item.0 == tz }) 1198 - { 1199 - True -> option.Some(tz) 1200 - False -> option.None 1201 - } 1202 - }) 1203 - |> option.flatten, 1186 + case list.any(zones.list, fn(item) { item.0 == tz }) { 1187 + True -> option.Some(tz) 1188 + False -> option.None 1189 + } 1190 + }) 1191 + |> option.flatten, 1204 1192 option.None, 1205 1193 ) 1206 1194 } ··· 1305 1293 string.concat([ 1306 1294 "+", 1307 1295 hour 1308 - |> int.to_string 1309 - |> string.pad_left(2, "0"), 1296 + |> int.to_string 1297 + |> string.pad_left(2, "0"), 1310 1298 ]) 1311 1299 False -> 1312 1300 string.concat([ 1313 1301 "-", 1314 1302 hour 1315 - |> int.absolute_value 1316 - |> int.to_string 1317 - |> string.pad_left(2, "0"), 1303 + |> int.absolute_value 1304 + |> int.to_string 1305 + |> string.pad_left(2, "0"), 1318 1306 ]) 1319 1307 }, 1320 1308 minute 1321 - |> int.absolute_value 1322 - |> int.to_string 1323 - |> string.pad_left(2, "0"), 1309 + |> int.absolute_value 1310 + |> int.to_string 1311 + |> string.pad_left(2, "0"), 1324 1312 ] 1325 1313 |> string.join(":") 1326 1314 |> Ok ··· 1332 1320 string.concat([ 1333 1321 "+", 1334 1322 hour 1335 - |> int.to_string 1336 - |> string.pad_left(2, "0"), 1323 + |> int.to_string 1324 + |> string.pad_left(2, "0"), 1337 1325 ]) 1338 1326 False -> 1339 1327 string.concat([ 1340 1328 "-", 1341 1329 hour 1342 - |> int.absolute_value 1343 - |> int.to_string 1344 - |> string.pad_left(2, "0"), 1330 + |> int.absolute_value 1331 + |> int.to_string 1332 + |> string.pad_left(2, "0"), 1345 1333 ]) 1346 1334 }, 1347 1335 "00",
+14 -4
src/birl/duration.gleam
··· 35 35 Duration(a - b) 36 36 } 37 37 38 + pub fn scale_up(value: Duration, factor: Int) -> Duration { 39 + let Duration(value) = value 40 + Duration(value * factor) 41 + } 42 + 43 + pub fn scale_down(value: Duration, factor: Int) -> Duration { 44 + let Duration(value) = value 45 + Duration(value / factor) 46 + } 47 + 38 48 pub fn micro_seconds(value: Int) -> Duration { 39 49 Duration(value) 40 50 } ··· 75 85 let Duration(dta) = a 76 86 let Duration(dtb) = b 77 87 78 - case #(dta == dtb, dta < dtb) { 79 - #(True, _) -> order.Eq 80 - #(_, True) -> order.Lt 81 - #(_, False) -> order.Gt 88 + case dta == dtb, dta < dtb { 89 + True, _ -> order.Eq 90 + _, True -> order.Lt 91 + _, False -> order.Gt 82 92 } 83 93 } 84 94
+89
src/birl/interval.gleam
··· 1 + import gleam/list 2 + import gleam/order 3 + import gleam/option 4 + import birl 5 + import birl/duration 6 + 7 + pub opaque type Interval { 8 + Interval(start: birl.Time, end: birl.Time) 9 + } 10 + 11 + pub fn from_start_and_end(start: birl.Time, end: birl.Time) { 12 + case birl.compare(start, end) { 13 + order.Eq -> Error(Nil) 14 + order.Lt -> Ok(Interval(start, end)) 15 + order.Gt -> Ok(Interval(end, start)) 16 + } 17 + } 18 + 19 + pub fn from_start_and_duration(start: birl.Time, duration: duration.Duration) { 20 + from_start_and_end(start, birl.add(start, duration)) 21 + } 22 + 23 + pub fn shift(interval: Interval, duration: duration.Duration) { 24 + case interval { 25 + Interval(start, end) -> 26 + Interval(birl.add(start, duration), birl.add(end, duration)) 27 + } 28 + } 29 + 30 + pub fn scale_up(interval: Interval, factor: Int) { 31 + case interval { 32 + Interval(start, end) -> { 33 + let assert Ok(interval) = 34 + birl.difference(end, start) 35 + |> duration.scale_up(factor) 36 + |> from_start_and_duration(start, _) 37 + interval 38 + } 39 + } 40 + } 41 + 42 + pub fn scale_down(interval: Interval, factor: Int) { 43 + case interval { 44 + Interval(start, end) -> { 45 + let assert Ok(interval) = 46 + birl.difference(end, start) 47 + |> duration.scale_down(factor) 48 + |> from_start_and_duration(start, _) 49 + interval 50 + } 51 + } 52 + } 53 + 54 + pub fn intersection(a: Interval, b: Interval) -> option.Option(Interval) { 55 + case contains(a, b), contains(b, a) { 56 + True, False -> option.Some(b) 57 + False, True -> option.Some(a) 58 + _, _ -> { 59 + let Interval(a_start, a_end) = a 60 + let Interval(b_start, b_end) = b 61 + 62 + case includes(a, b_start), includes(b, a_start) { 63 + True, False -> option.Some(Interval(b_start, a_end)) 64 + False, True -> option.Some(Interval(a_start, b_end)) 65 + _, _ -> option.None 66 + } 67 + } 68 + } 69 + } 70 + 71 + pub fn includes(interval: Interval, time: birl.Time) { 72 + case interval { 73 + Interval(start, end) -> 74 + list.contains([order.Eq, order.Lt], birl.compare(start, time)) 75 + && list.contains([order.Eq, order.Gt], birl.compare(end, time)) 76 + } 77 + } 78 + 79 + pub fn contains(a: Interval, b: Interval) { 80 + case b { 81 + Interval(start, end) -> includes(a, start) && includes(a, end) 82 + } 83 + } 84 + 85 + pub fn get_bounds(interval: Interval) -> #(birl.Time, birl.Time) { 86 + case interval { 87 + Interval(start, end) -> #(start, end) 88 + } 89 + }
+2 -2
src/birl/zones.gleam
··· 148 148 #("Antarctica/Rothera", -10_800), 149 149 #("Antarctica/Troll", 0), 150 150 #("Antarctica/Vostok", 18_000), 151 - #("Asia/Almaty", 21_600), 151 + #("Asia/Almaty", 18_000), 152 152 #("Asia/Amman", 10_800), 153 153 #("Asia/Anadyr", 43_200), 154 154 #("Asia/Aqtau", 18_000), ··· 199 199 #("Asia/Pontianak", 25_200), 200 200 #("Asia/Pyongyang", 32_400), 201 201 #("Asia/Qatar", 10_800), 202 - #("Asia/Qostanay", 21_600), 202 + #("Asia/Qostanay", 18_000), 203 203 #("Asia/Qyzylorda", 18_000), 204 204 #("Asia/Riyadh", 10_800), 205 205 #("Asia/Sakhalin", 39_600),
+13 -13
src/birl_ffi.erl
··· 72 72 end 73 73 end. 74 74 75 - local_timezone_from_etc() -> 76 - case file:read_file("/etc/timezone") of 77 - {ok, NewLinedTimezone} -> 78 - {some, string:trim(NewLinedTimezone)}; 79 - {error, _} -> 80 - case file:read_link("/etc/localtime") of 81 - {ok, Path} -> 82 - {some, timezone_from_path(Path)}; 83 - {error, _} -> 84 - none 85 - end 86 - end. 87 - 88 75 monotonic_now() -> 89 76 StartTime = erlang:system_info(start_time), 90 77 CurrentTime = erlang:monotonic_time(), ··· 118 105 weekday(Timestamp, Offset) -> 119 106 {Date, _} = to_parts(Timestamp, Offset), 120 107 calendar:day_of_the_week(Date) - 1. 108 + 109 + local_timezone_from_etc() -> 110 + case file:read_file("/etc/timezone") of 111 + {ok, NewLinedTimezone} -> 112 + {some, string:trim(NewLinedTimezone)}; 113 + {error, _} -> 114 + case file:read_link("/etc/localtime") of 115 + {ok, Path} -> 116 + {some, timezone_from_path(Path)}; 117 + {error, _} -> 118 + none 119 + end 120 + end. 121 121 122 122 timezone_from_path(Path) -> 123 123 Split = string:split(Path, "/", all),
+241 -152
zones-provider/Cargo.lock
··· 19 19 20 20 [[package]] 21 21 name = "aho-corasick" 22 - version = "1.1.2" 22 + version = "1.1.3" 23 23 source = "registry+https://github.com/rust-lang/crates.io-index" 24 - checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" 24 + checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 25 25 dependencies = [ 26 26 "memchr", 27 27 ] ··· 49 49 50 50 [[package]] 51 51 name = "base64" 52 - version = "0.21.5" 52 + version = "0.21.7" 53 53 source = "registry+https://github.com/rust-lang/crates.io-index" 54 - checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" 54 + checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 55 55 56 56 [[package]] 57 57 name = "bitflags" ··· 61 61 62 62 [[package]] 63 63 name = "bitflags" 64 - version = "2.4.1" 64 + version = "2.5.0" 65 65 source = "registry+https://github.com/rust-lang/crates.io-index" 66 - checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" 66 + checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 67 67 68 68 [[package]] 69 69 name = "bumpalo" 70 - version = "3.14.0" 70 + version = "3.15.4" 71 71 source = "registry+https://github.com/rust-lang/crates.io-index" 72 - checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" 72 + checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" 73 73 74 74 [[package]] 75 75 name = "bytes" ··· 79 79 80 80 [[package]] 81 81 name = "cc" 82 - version = "1.0.83" 82 + version = "1.0.90" 83 83 source = "registry+https://github.com/rust-lang/crates.io-index" 84 - checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" 85 - dependencies = [ 86 - "libc", 87 - ] 84 + checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" 88 85 89 86 [[package]] 90 87 name = "cfg-if" ··· 110 107 111 108 [[package]] 112 109 name = "crc32fast" 113 - version = "1.3.2" 110 + version = "1.4.0" 114 111 source = "registry+https://github.com/rust-lang/crates.io-index" 115 - checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 112 + checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" 116 113 dependencies = [ 117 114 "cfg-if", 118 115 ] ··· 202 199 203 200 [[package]] 204 201 name = "futures-channel" 205 - version = "0.3.29" 202 + version = "0.3.30" 206 203 source = "registry+https://github.com/rust-lang/crates.io-index" 207 - checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" 204 + checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 208 205 dependencies = [ 209 206 "futures-core", 210 207 ] 211 208 212 209 [[package]] 213 210 name = "futures-core" 214 - version = "0.3.29" 211 + version = "0.3.30" 215 212 source = "registry+https://github.com/rust-lang/crates.io-index" 216 - checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" 213 + checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 217 214 218 215 [[package]] 219 216 name = "futures-sink" 220 - version = "0.3.29" 217 + version = "0.3.30" 221 218 source = "registry+https://github.com/rust-lang/crates.io-index" 222 - checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" 219 + checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 223 220 224 221 [[package]] 225 222 name = "futures-task" 226 - version = "0.3.29" 223 + version = "0.3.30" 227 224 source = "registry+https://github.com/rust-lang/crates.io-index" 228 - checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" 225 + checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 229 226 230 227 [[package]] 231 228 name = "futures-util" 232 - version = "0.3.29" 229 + version = "0.3.30" 233 230 source = "registry+https://github.com/rust-lang/crates.io-index" 234 - checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" 231 + checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 235 232 dependencies = [ 236 233 "futures-core", 237 234 "futures-task", ··· 247 244 248 245 [[package]] 249 246 name = "h2" 250 - version = "0.3.22" 247 + version = "0.4.3" 251 248 source = "registry+https://github.com/rust-lang/crates.io-index" 252 - checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" 249 + checksum = "51ee2dd2e4f378392eeff5d51618cd9a63166a2513846bbc55f21cfacd9199d4" 253 250 dependencies = [ 254 251 "bytes", 255 252 "fnv", ··· 272 269 273 270 [[package]] 274 271 name = "hermit-abi" 275 - version = "0.3.3" 272 + version = "0.3.9" 276 273 source = "registry+https://github.com/rust-lang/crates.io-index" 277 - checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" 274 + checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 278 275 279 276 [[package]] 280 277 name = "http" 281 - version = "0.2.11" 278 + version = "1.1.0" 282 279 source = "registry+https://github.com/rust-lang/crates.io-index" 283 - checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" 280 + checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 284 281 dependencies = [ 285 282 "bytes", 286 283 "fnv", ··· 289 286 290 287 [[package]] 291 288 name = "http-body" 292 - version = "0.4.6" 289 + version = "1.0.0" 290 + source = "registry+https://github.com/rust-lang/crates.io-index" 291 + checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" 292 + dependencies = [ 293 + "bytes", 294 + "http", 295 + ] 296 + 297 + [[package]] 298 + name = "http-body-util" 299 + version = "0.1.1" 293 300 source = "registry+https://github.com/rust-lang/crates.io-index" 294 - checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 301 + checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" 295 302 dependencies = [ 296 303 "bytes", 304 + "futures-core", 297 305 "http", 306 + "http-body", 298 307 "pin-project-lite", 299 308 ] 300 309 ··· 305 314 checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 306 315 307 316 [[package]] 308 - name = "httpdate" 309 - version = "1.0.3" 310 - source = "registry+https://github.com/rust-lang/crates.io-index" 311 - checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 312 - 313 - [[package]] 314 317 name = "hyper" 315 - version = "0.14.28" 318 + version = "1.2.0" 316 319 source = "registry+https://github.com/rust-lang/crates.io-index" 317 - checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" 320 + checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" 318 321 dependencies = [ 319 322 "bytes", 320 323 "futures-channel", 321 - "futures-core", 322 324 "futures-util", 323 325 "h2", 324 326 "http", 325 327 "http-body", 326 328 "httparse", 327 - "httpdate", 328 329 "itoa", 329 330 "pin-project-lite", 330 - "socket2", 331 + "smallvec", 331 332 "tokio", 332 - "tower-service", 333 - "tracing", 334 333 "want", 335 334 ] 336 335 337 336 [[package]] 338 337 name = "hyper-tls" 339 - version = "0.5.0" 338 + version = "0.6.0" 340 339 source = "registry+https://github.com/rust-lang/crates.io-index" 341 - checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 340 + checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 342 341 dependencies = [ 343 342 "bytes", 343 + "http-body-util", 344 344 "hyper", 345 + "hyper-util", 345 346 "native-tls", 346 347 "tokio", 347 348 "tokio-native-tls", 349 + "tower-service", 350 + ] 351 + 352 + [[package]] 353 + name = "hyper-util" 354 + version = "0.1.3" 355 + source = "registry+https://github.com/rust-lang/crates.io-index" 356 + checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" 357 + dependencies = [ 358 + "bytes", 359 + "futures-channel", 360 + "futures-util", 361 + "http", 362 + "http-body", 363 + "hyper", 364 + "pin-project-lite", 365 + "socket2", 366 + "tokio", 367 + "tower", 368 + "tower-service", 369 + "tracing", 348 370 ] 349 371 350 372 [[package]] ··· 359 381 360 382 [[package]] 361 383 name = "indexmap" 362 - version = "2.1.0" 384 + version = "2.2.5" 363 385 source = "registry+https://github.com/rust-lang/crates.io-index" 364 - checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" 386 + checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" 365 387 dependencies = [ 366 388 "equivalent", 367 389 "hashbrown", ··· 381 403 382 404 [[package]] 383 405 name = "js-sys" 384 - version = "0.3.66" 406 + version = "0.3.69" 385 407 source = "registry+https://github.com/rust-lang/crates.io-index" 386 - checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" 408 + checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 387 409 dependencies = [ 388 410 "wasm-bindgen", 389 411 ] ··· 396 418 397 419 [[package]] 398 420 name = "libc" 399 - version = "0.2.151" 421 + version = "0.2.153" 400 422 source = "registry+https://github.com/rust-lang/crates.io-index" 401 - checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" 423 + checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" 402 424 403 425 [[package]] 404 426 name = "linux-raw-sys" 405 - version = "0.4.12" 427 + version = "0.4.13" 406 428 source = "registry+https://github.com/rust-lang/crates.io-index" 407 - checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" 429 + checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" 408 430 409 431 [[package]] 410 432 name = "log" 411 - version = "0.4.20" 433 + version = "0.4.21" 412 434 source = "registry+https://github.com/rust-lang/crates.io-index" 413 - checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 435 + checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 414 436 415 437 [[package]] 416 438 name = "memchr" 417 - version = "2.6.4" 439 + version = "2.7.1" 418 440 source = "registry+https://github.com/rust-lang/crates.io-index" 419 - checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" 441 + checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" 420 442 421 443 [[package]] 422 444 name = "mime" ··· 426 448 427 449 [[package]] 428 450 name = "miniz_oxide" 429 - version = "0.7.1" 451 + version = "0.7.2" 430 452 source = "registry+https://github.com/rust-lang/crates.io-index" 431 - checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" 453 + checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" 432 454 dependencies = [ 433 455 "adler", 434 456 ] 435 457 436 458 [[package]] 437 459 name = "mio" 438 - version = "0.8.10" 460 + version = "0.8.11" 439 461 source = "registry+https://github.com/rust-lang/crates.io-index" 440 - checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" 462 + checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 441 463 dependencies = [ 442 464 "libc", 443 465 "wasi", ··· 474 496 475 497 [[package]] 476 498 name = "object" 477 - version = "0.32.1" 499 + version = "0.32.2" 478 500 source = "registry+https://github.com/rust-lang/crates.io-index" 479 - checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" 501 + checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" 480 502 dependencies = [ 481 503 "memchr", 482 504 ] ··· 489 511 490 512 [[package]] 491 513 name = "openssl" 492 - version = "0.10.61" 514 + version = "0.10.64" 493 515 source = "registry+https://github.com/rust-lang/crates.io-index" 494 - checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45" 516 + checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" 495 517 dependencies = [ 496 - "bitflags 2.4.1", 518 + "bitflags 2.5.0", 497 519 "cfg-if", 498 520 "foreign-types", 499 521 "libc", ··· 521 543 522 544 [[package]] 523 545 name = "openssl-sys" 524 - version = "0.9.97" 546 + version = "0.9.101" 525 547 source = "registry+https://github.com/rust-lang/crates.io-index" 526 - checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" 548 + checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" 527 549 dependencies = [ 528 550 "cc", 529 551 "libc", ··· 547 569 checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 548 570 549 571 [[package]] 572 + name = "pin-project" 573 + version = "1.1.5" 574 + source = "registry+https://github.com/rust-lang/crates.io-index" 575 + checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" 576 + dependencies = [ 577 + "pin-project-internal", 578 + ] 579 + 580 + [[package]] 581 + name = "pin-project-internal" 582 + version = "1.1.5" 583 + source = "registry+https://github.com/rust-lang/crates.io-index" 584 + checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" 585 + dependencies = [ 586 + "proc-macro2", 587 + "quote", 588 + "syn", 589 + ] 590 + 591 + [[package]] 550 592 name = "pin-project-lite" 551 593 version = "0.2.13" 552 594 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 560 602 561 603 [[package]] 562 604 name = "pkg-config" 563 - version = "0.3.28" 605 + version = "0.3.30" 564 606 source = "registry+https://github.com/rust-lang/crates.io-index" 565 - checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" 607 + checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 566 608 567 609 [[package]] 568 610 name = "proc-macro2" 569 - version = "1.0.71" 611 + version = "1.0.79" 570 612 source = "registry+https://github.com/rust-lang/crates.io-index" 571 - checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" 613 + checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" 572 614 dependencies = [ 573 615 "unicode-ident", 574 616 ] 575 617 576 618 [[package]] 577 619 name = "quote" 578 - version = "1.0.33" 620 + version = "1.0.35" 579 621 source = "registry+https://github.com/rust-lang/crates.io-index" 580 - checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" 622 + checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" 581 623 dependencies = [ 582 624 "proc-macro2", 583 625 ] ··· 593 635 594 636 [[package]] 595 637 name = "regex" 596 - version = "1.10.2" 638 + version = "1.10.3" 597 639 source = "registry+https://github.com/rust-lang/crates.io-index" 598 - checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" 640 + checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" 599 641 dependencies = [ 600 642 "aho-corasick", 601 643 "memchr", ··· 605 647 606 648 [[package]] 607 649 name = "regex-automata" 608 - version = "0.4.3" 650 + version = "0.4.6" 609 651 source = "registry+https://github.com/rust-lang/crates.io-index" 610 - checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" 652 + checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" 611 653 dependencies = [ 612 654 "aho-corasick", 613 655 "memchr", ··· 622 664 623 665 [[package]] 624 666 name = "reqwest" 625 - version = "0.11.23" 667 + version = "0.12.0" 626 668 source = "registry+https://github.com/rust-lang/crates.io-index" 627 - checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" 669 + checksum = "58b48d98d932f4ee75e541614d32a7f44c889b72bd9c2e04d95edd135989df88" 628 670 dependencies = [ 629 671 "base64", 630 672 "bytes", ··· 634 676 "h2", 635 677 "http", 636 678 "http-body", 679 + "http-body-util", 637 680 "hyper", 638 681 "hyper-tls", 682 + "hyper-util", 639 683 "ipnet", 640 684 "js-sys", 641 685 "log", ··· 644 688 "once_cell", 645 689 "percent-encoding", 646 690 "pin-project-lite", 691 + "rustls-pemfile", 647 692 "serde", 648 693 "serde_json", 649 694 "serde_urlencoded", 695 + "sync_wrapper", 650 696 "system-configuration", 651 697 "tokio", 652 698 "tokio-native-tls", ··· 666 712 667 713 [[package]] 668 714 name = "rustix" 669 - version = "0.38.28" 715 + version = "0.38.32" 670 716 source = "registry+https://github.com/rust-lang/crates.io-index" 671 - checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" 717 + checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" 672 718 dependencies = [ 673 - "bitflags 2.4.1", 719 + "bitflags 2.5.0", 674 720 "errno", 675 721 "libc", 676 722 "linux-raw-sys", ··· 678 724 ] 679 725 680 726 [[package]] 727 + name = "rustls-pemfile" 728 + version = "1.0.4" 729 + source = "registry+https://github.com/rust-lang/crates.io-index" 730 + checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 731 + dependencies = [ 732 + "base64", 733 + ] 734 + 735 + [[package]] 681 736 name = "ryu" 682 - version = "1.0.16" 737 + version = "1.0.17" 683 738 source = "registry+https://github.com/rust-lang/crates.io-index" 684 - checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" 739 + checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" 685 740 686 741 [[package]] 687 742 name = "schannel" 688 - version = "0.1.22" 743 + version = "0.1.23" 689 744 source = "registry+https://github.com/rust-lang/crates.io-index" 690 - checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" 745 + checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 691 746 dependencies = [ 692 - "windows-sys 0.48.0", 747 + "windows-sys 0.52.0", 693 748 ] 694 749 695 750 [[package]] ··· 717 772 718 773 [[package]] 719 774 name = "serde" 720 - version = "1.0.193" 775 + version = "1.0.197" 721 776 source = "registry+https://github.com/rust-lang/crates.io-index" 722 - checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" 777 + checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" 723 778 dependencies = [ 724 779 "serde_derive", 725 780 ] 726 781 727 782 [[package]] 728 783 name = "serde_derive" 729 - version = "1.0.193" 784 + version = "1.0.197" 730 785 source = "registry+https://github.com/rust-lang/crates.io-index" 731 - checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" 786 + checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" 732 787 dependencies = [ 733 788 "proc-macro2", 734 789 "quote", ··· 737 792 738 793 [[package]] 739 794 name = "serde_json" 740 - version = "1.0.108" 795 + version = "1.0.114" 741 796 source = "registry+https://github.com/rust-lang/crates.io-index" 742 - checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" 797 + checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" 743 798 dependencies = [ 744 799 "itoa", 745 800 "ryu", ··· 768 823 ] 769 824 770 825 [[package]] 826 + name = "smallvec" 827 + version = "1.13.2" 828 + source = "registry+https://github.com/rust-lang/crates.io-index" 829 + checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 830 + 831 + [[package]] 771 832 name = "socket2" 772 - version = "0.5.5" 833 + version = "0.5.6" 773 834 source = "registry+https://github.com/rust-lang/crates.io-index" 774 - checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" 835 + checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" 775 836 dependencies = [ 776 837 "libc", 777 - "windows-sys 0.48.0", 838 + "windows-sys 0.52.0", 778 839 ] 779 840 780 841 [[package]] 781 842 name = "syn" 782 - version = "2.0.42" 843 + version = "2.0.53" 783 844 source = "registry+https://github.com/rust-lang/crates.io-index" 784 - checksum = "5b7d0a2c048d661a1a59fcd7355baa232f7ed34e0ee4df2eef3c1c1c0d3852d8" 845 + checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" 785 846 dependencies = [ 786 847 "proc-macro2", 787 848 "quote", 788 849 "unicode-ident", 789 850 ] 851 + 852 + [[package]] 853 + name = "sync_wrapper" 854 + version = "0.1.2" 855 + source = "registry+https://github.com/rust-lang/crates.io-index" 856 + checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 790 857 791 858 [[package]] 792 859 name = "system-configuration" ··· 822 889 823 890 [[package]] 824 891 name = "tempfile" 825 - version = "3.8.1" 892 + version = "3.10.1" 826 893 source = "registry+https://github.com/rust-lang/crates.io-index" 827 - checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" 894 + checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" 828 895 dependencies = [ 829 896 "cfg-if", 830 897 "fastrand", 831 - "redox_syscall", 832 898 "rustix", 833 - "windows-sys 0.48.0", 899 + "windows-sys 0.52.0", 834 900 ] 835 901 836 902 [[package]] ··· 850 916 851 917 [[package]] 852 918 name = "tokio" 853 - version = "1.35.1" 919 + version = "1.36.0" 854 920 source = "registry+https://github.com/rust-lang/crates.io-index" 855 - checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" 921 + checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" 856 922 dependencies = [ 857 923 "backtrace", 858 924 "bytes", ··· 901 967 ] 902 968 903 969 [[package]] 970 + name = "tower" 971 + version = "0.4.13" 972 + source = "registry+https://github.com/rust-lang/crates.io-index" 973 + checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 974 + dependencies = [ 975 + "futures-core", 976 + "futures-util", 977 + "pin-project", 978 + "pin-project-lite", 979 + "tokio", 980 + "tower-layer", 981 + "tower-service", 982 + "tracing", 983 + ] 984 + 985 + [[package]] 986 + name = "tower-layer" 987 + version = "0.3.2" 988 + source = "registry+https://github.com/rust-lang/crates.io-index" 989 + checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 990 + 991 + [[package]] 904 992 name = "tower-service" 905 993 version = "0.3.2" 906 994 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 912 1000 source = "registry+https://github.com/rust-lang/crates.io-index" 913 1001 checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 914 1002 dependencies = [ 1003 + "log", 915 1004 "pin-project-lite", 916 1005 "tracing-core", 917 1006 ] ··· 933 1022 934 1023 [[package]] 935 1024 name = "unicode-bidi" 936 - version = "0.3.14" 1025 + version = "0.3.15" 937 1026 source = "registry+https://github.com/rust-lang/crates.io-index" 938 - checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" 1027 + checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 939 1028 940 1029 [[package]] 941 1030 name = "unicode-ident" ··· 945 1034 946 1035 [[package]] 947 1036 name = "unicode-normalization" 948 - version = "0.1.22" 1037 + version = "0.1.23" 949 1038 source = "registry+https://github.com/rust-lang/crates.io-index" 950 - checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 1039 + checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 951 1040 dependencies = [ 952 1041 "tinyvec", 953 1042 ] ··· 986 1075 987 1076 [[package]] 988 1077 name = "wasm-bindgen" 989 - version = "0.2.89" 1078 + version = "0.2.92" 990 1079 source = "registry+https://github.com/rust-lang/crates.io-index" 991 - checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" 1080 + checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 992 1081 dependencies = [ 993 1082 "cfg-if", 994 1083 "wasm-bindgen-macro", ··· 996 1085 997 1086 [[package]] 998 1087 name = "wasm-bindgen-backend" 999 - version = "0.2.89" 1088 + version = "0.2.92" 1000 1089 source = "registry+https://github.com/rust-lang/crates.io-index" 1001 - checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" 1090 + checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 1002 1091 dependencies = [ 1003 1092 "bumpalo", 1004 1093 "log", ··· 1011 1100 1012 1101 [[package]] 1013 1102 name = "wasm-bindgen-futures" 1014 - version = "0.4.39" 1103 + version = "0.4.42" 1015 1104 source = "registry+https://github.com/rust-lang/crates.io-index" 1016 - checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" 1105 + checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" 1017 1106 dependencies = [ 1018 1107 "cfg-if", 1019 1108 "js-sys", ··· 1023 1112 1024 1113 [[package]] 1025 1114 name = "wasm-bindgen-macro" 1026 - version = "0.2.89" 1115 + version = "0.2.92" 1027 1116 source = "registry+https://github.com/rust-lang/crates.io-index" 1028 - checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" 1117 + checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 1029 1118 dependencies = [ 1030 1119 "quote", 1031 1120 "wasm-bindgen-macro-support", ··· 1033 1122 1034 1123 [[package]] 1035 1124 name = "wasm-bindgen-macro-support" 1036 - version = "0.2.89" 1125 + version = "0.2.92" 1037 1126 source = "registry+https://github.com/rust-lang/crates.io-index" 1038 - checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" 1127 + checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 1039 1128 dependencies = [ 1040 1129 "proc-macro2", 1041 1130 "quote", ··· 1046 1135 1047 1136 [[package]] 1048 1137 name = "wasm-bindgen-shared" 1049 - version = "0.2.89" 1138 + version = "0.2.92" 1050 1139 source = "registry+https://github.com/rust-lang/crates.io-index" 1051 - checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" 1140 + checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 1052 1141 1053 1142 [[package]] 1054 1143 name = "web-sys" 1055 - version = "0.3.66" 1144 + version = "0.3.69" 1056 1145 source = "registry+https://github.com/rust-lang/crates.io-index" 1057 - checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" 1146 + checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 1058 1147 dependencies = [ 1059 1148 "js-sys", 1060 1149 "wasm-bindgen", ··· 1075 1164 source = "registry+https://github.com/rust-lang/crates.io-index" 1076 1165 checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1077 1166 dependencies = [ 1078 - "windows-targets 0.52.0", 1167 + "windows-targets 0.52.4", 1079 1168 ] 1080 1169 1081 1170 [[package]] ··· 1095 1184 1096 1185 [[package]] 1097 1186 name = "windows-targets" 1098 - version = "0.52.0" 1187 + version = "0.52.4" 1099 1188 source = "registry+https://github.com/rust-lang/crates.io-index" 1100 - checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" 1189 + checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" 1101 1190 dependencies = [ 1102 - "windows_aarch64_gnullvm 0.52.0", 1103 - "windows_aarch64_msvc 0.52.0", 1104 - "windows_i686_gnu 0.52.0", 1105 - "windows_i686_msvc 0.52.0", 1106 - "windows_x86_64_gnu 0.52.0", 1107 - "windows_x86_64_gnullvm 0.52.0", 1108 - "windows_x86_64_msvc 0.52.0", 1191 + "windows_aarch64_gnullvm 0.52.4", 1192 + "windows_aarch64_msvc 0.52.4", 1193 + "windows_i686_gnu 0.52.4", 1194 + "windows_i686_msvc 0.52.4", 1195 + "windows_x86_64_gnu 0.52.4", 1196 + "windows_x86_64_gnullvm 0.52.4", 1197 + "windows_x86_64_msvc 0.52.4", 1109 1198 ] 1110 1199 1111 1200 [[package]] ··· 1116 1205 1117 1206 [[package]] 1118 1207 name = "windows_aarch64_gnullvm" 1119 - version = "0.52.0" 1208 + version = "0.52.4" 1120 1209 source = "registry+https://github.com/rust-lang/crates.io-index" 1121 - checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" 1210 + checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" 1122 1211 1123 1212 [[package]] 1124 1213 name = "windows_aarch64_msvc" ··· 1128 1217 1129 1218 [[package]] 1130 1219 name = "windows_aarch64_msvc" 1131 - version = "0.52.0" 1220 + version = "0.52.4" 1132 1221 source = "registry+https://github.com/rust-lang/crates.io-index" 1133 - checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" 1222 + checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" 1134 1223 1135 1224 [[package]] 1136 1225 name = "windows_i686_gnu" ··· 1140 1229 1141 1230 [[package]] 1142 1231 name = "windows_i686_gnu" 1143 - version = "0.52.0" 1232 + version = "0.52.4" 1144 1233 source = "registry+https://github.com/rust-lang/crates.io-index" 1145 - checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" 1234 + checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" 1146 1235 1147 1236 [[package]] 1148 1237 name = "windows_i686_msvc" ··· 1152 1241 1153 1242 [[package]] 1154 1243 name = "windows_i686_msvc" 1155 - version = "0.52.0" 1244 + version = "0.52.4" 1156 1245 source = "registry+https://github.com/rust-lang/crates.io-index" 1157 - checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" 1246 + checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" 1158 1247 1159 1248 [[package]] 1160 1249 name = "windows_x86_64_gnu" ··· 1164 1253 1165 1254 [[package]] 1166 1255 name = "windows_x86_64_gnu" 1167 - version = "0.52.0" 1256 + version = "0.52.4" 1168 1257 source = "registry+https://github.com/rust-lang/crates.io-index" 1169 - checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" 1258 + checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" 1170 1259 1171 1260 [[package]] 1172 1261 name = "windows_x86_64_gnullvm" ··· 1176 1265 1177 1266 [[package]] 1178 1267 name = "windows_x86_64_gnullvm" 1179 - version = "0.52.0" 1268 + version = "0.52.4" 1180 1269 source = "registry+https://github.com/rust-lang/crates.io-index" 1181 - checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" 1270 + checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" 1182 1271 1183 1272 [[package]] 1184 1273 name = "windows_x86_64_msvc" ··· 1188 1277 1189 1278 [[package]] 1190 1279 name = "windows_x86_64_msvc" 1191 - version = "0.52.0" 1280 + version = "0.52.4" 1192 1281 source = "registry+https://github.com/rust-lang/crates.io-index" 1193 - checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" 1282 + checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" 1194 1283 1195 1284 [[package]] 1196 1285 name = "winreg" ··· 1204 1293 1205 1294 [[package]] 1206 1295 name = "xattr" 1207 - version = "1.1.3" 1296 + version = "1.3.1" 1208 1297 source = "registry+https://github.com/rust-lang/crates.io-index" 1209 - checksum = "a7dae5072fe1f8db8f8d29059189ac175196e410e40ba42d5d4684ae2f750995" 1298 + checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" 1210 1299 dependencies = [ 1211 1300 "libc", 1212 1301 "linux-raw-sys",
+2 -2
zones-provider/Cargo.toml
··· 9 9 flate2 = "1.0" 10 10 parse-zoneinfo = "0.3" 11 11 regex = "1.10" 12 - reqwest = "0.11" 12 + reqwest = "0.12" 13 13 tar = "0.4" 14 - tokio = { version = "1.35", features = ["macros", "rt-multi-thread"] } 14 + tokio = { version = "1.36", features = ["macros", "rt-multi-thread"] }