Ver Fonte

up noodles vcf

Thomas há 1 ano atrás
pai
commit
97ec4c58d8
5 ficheiros alterados com 472 adições e 261 exclusões
  1. 337 138
      Cargo.lock
  2. 23 25
      Cargo.toml
  3. 106 92
      src/in_out/vcf_writer.rs
  4. 4 5
      src/lib.rs
  5. 2 1
      src/variants.rs

+ 337 - 138
Cargo.lock

@@ -71,7 +71,7 @@ version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5"
 dependencies = [
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -81,14 +81,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19"
 dependencies = [
  "anstyle",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "anyhow"
-version = "1.0.83"
+version = "1.0.86"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3"
+checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
 
 [[package]]
 name = "approx"
@@ -117,6 +117,26 @@ dependencies = [
  "thiserror",
 ]
 
+[[package]]
+name = "bindgen"
+version = "0.69.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "itertools",
+ "lazy_static",
+ "lazycell",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.64",
+]
+
 [[package]]
 name = "bio-types"
 version = "1.0.1"
@@ -132,9 +152,9 @@ dependencies = [
 
 [[package]]
 name = "bit-vec"
-version = "0.6.3"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22"
 
 [[package]]
 name = "bitflags"
@@ -142,6 +162,16 @@ version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
 
+[[package]]
+name = "bstr"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
 [[package]]
 name = "bytemuck"
 version = "1.16.0"
@@ -182,17 +212,37 @@ dependencies = [
  "once_cell",
 ]
 
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
 [[package]]
 name = "cfg-if"
 version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
+[[package]]
+name = "clang-sys"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
 [[package]]
 name = "clap"
-version = "4.5.4"
+version = "4.5.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0"
+checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -200,9 +250,9 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.5.2"
+version = "4.5.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4"
+checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99"
 dependencies = [
  "anstream",
  "anstyle",
@@ -212,9 +262,9 @@ dependencies = [
 
 [[package]]
 name = "clap_derive"
-version = "4.5.4"
+version = "4.5.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64"
+checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0"
 dependencies = [
  "heck 0.5.0",
  "proc-macro2",
@@ -245,9 +295,9 @@ checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422"
 
 [[package]]
 name = "confy"
-version = "0.5.1"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e37668cb35145dcfaa1931a5f37fde375eeae8068b4c0d2f289da28a270b2d2c"
+checksum = "45b1f4c00870f07dc34adcac82bb6a72cc5aabca8536ba1797e01df51d2ce9a0"
 dependencies = [
  "directories",
  "serde",
@@ -265,7 +315,7 @@ dependencies = [
  "lazy_static",
  "libc",
  "unicode-width",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -350,7 +400,7 @@ dependencies = [
  "openssl-sys",
  "pkg-config",
  "vcpkg",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -361,11 +411,12 @@ checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9"
 
 [[package]]
 name = "dashmap"
-version = "5.5.3"
+version = "6.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28"
 dependencies = [
  "cfg-if",
+ "crossbeam-utils",
  "hashbrown",
  "lock_api",
  "once_cell",
@@ -387,9 +438,9 @@ dependencies = [
 
 [[package]]
 name = "directories"
-version = "4.0.1"
+version = "5.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210"
+checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35"
 dependencies = [
  "dirs-sys",
 ]
@@ -406,13 +457,14 @@ dependencies = [
 
 [[package]]
 name = "dirs-sys"
-version = "0.3.7"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
 dependencies = [
  "libc",
+ "option-ext",
  "redox_users",
- "winapi",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -444,17 +496,27 @@ version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
 
+[[package]]
+name = "env_filter"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab"
+dependencies = [
+ "log",
+ "regex",
+]
+
 [[package]]
 name = "env_logger"
-version = "0.10.2"
+version = "0.11.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
+checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d"
 dependencies = [
+ "anstream",
+ "anstyle",
+ "env_filter",
  "humantime",
- "is-terminal",
  "log",
- "regex",
- "termcolor",
 ]
 
 [[package]]
@@ -544,9 +606,9 @@ dependencies = [
 
 [[package]]
 name = "hashlink"
-version = "0.8.4"
+version = "0.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
+checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af"
 dependencies = [
  "hashbrown",
 ]
@@ -575,6 +637,7 @@ version = "2.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e9f348d14cb4e50444e39fcd6b00302fe2ed2bc88094142f6278391d349a386d"
 dependencies = [
+ "bindgen",
  "bzip2-sys",
  "cc",
  "curl-sys",
@@ -659,7 +722,7 @@ checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
 dependencies = [
  "hermit-abi",
  "libc",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -668,6 +731,15 @@ version = "1.70.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800"
 
+[[package]]
+name = "itertools"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+dependencies = [
+ "either",
+]
+
 [[package]]
 name = "itoa"
 version = "1.0.11"
@@ -689,6 +761,12 @@ version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
 [[package]]
 name = "lexical-core"
 version = "0.8.5"
@@ -759,6 +837,16 @@ version = "0.2.153"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
 
+[[package]]
+name = "libloading"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4"
+dependencies = [
+ "cfg-if",
+ "windows-targets 0.52.5",
+]
+
 [[package]]
 name = "libm"
 version = "0.2.8"
@@ -777,9 +865,9 @@ dependencies = [
 
 [[package]]
 name = "libsqlite3-sys"
-version = "0.27.0"
+version = "0.28.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716"
+checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f"
 dependencies = [
  "pkg-config",
  "vcpkg",
@@ -816,9 +904,9 @@ dependencies = [
 
 [[package]]
 name = "log"
-version = "0.4.21"
+version = "0.4.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
 
 [[package]]
 name = "lzma-sys"
@@ -847,6 +935,12 @@ version = "2.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
 
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
 [[package]]
 name = "miniz_oxide"
 version = "0.7.2"
@@ -858,9 +952,9 @@ dependencies = [
 
 [[package]]
 name = "nalgebra"
-version = "0.29.0"
+version = "0.32.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d506eb7e08d6329505faa8a3a00a5dcc6de9f76e0c77e4b75763ae3c770831ff"
+checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4"
 dependencies = [
  "approx",
  "matrixmultiply",
@@ -876,13 +970,13 @@ dependencies = [
 
 [[package]]
 name = "nalgebra-macros"
-version = "0.1.0"
+version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218"
+checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.64",
 ]
 
 [[package]]
@@ -894,27 +988,37 @@ dependencies = [
  "rustc_version",
 ]
 
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
 [[package]]
 name = "noodles-bam"
-version = "0.52.0"
+version = "0.66.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e75824c4fad4713c177148543d96893212c2b8b6efc3cd9fc19934bb9334c97"
+checksum = "69ab4109074a07e6066cc0ba46db7e1c2ffc8f3e12d1c7aeb9811e6ff37e67c6"
 dependencies = [
- "bit-vec",
+ "bstr",
  "byteorder",
  "bytes",
  "indexmap",
  "noodles-bgzf",
- "noodles-core 0.13.0",
- "noodles-csi 0.29.0",
+ "noodles-core",
+ "noodles-csi",
  "noodles-sam",
 ]
 
 [[package]]
 name = "noodles-bgzf"
-version = "0.26.0"
+version = "0.32.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8970db2e84adb1007377dd3988258d7a64e3fc4c05602ebf94e1f8cba207c030"
+checksum = "2b2fba0f4a64cc897d9396d730a0c444d148daed7de31ad5904ecc673178fc9d"
 dependencies = [
  "byteorder",
  "bytes",
@@ -924,107 +1028,93 @@ dependencies = [
 
 [[package]]
 name = "noodles-core"
-version = "0.13.0"
+version = "0.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2993a01927b449e191670446b8a36e153e89fc4527a246a84eed9057adeefe1b"
-
-[[package]]
-name = "noodles-core"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7336c3be652de4e05444c9b12a32331beb5ba3316e8872d92bfdd8ef3b06c282"
-
-[[package]]
-name = "noodles-csi"
-version = "0.29.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9abd5616c374ad3da6677603dc1637ef518388537ec4a0263b8e4471ee5b0801"
+checksum = "c5a8c6b020d1205abef2b0fab4463a6c5ecc3c8f4d561ca8b0d1a42323376200"
 dependencies = [
- "bit-vec",
- "byteorder",
- "indexmap",
- "noodles-bgzf",
- "noodles-core 0.13.0",
+ "bstr",
 ]
 
 [[package]]
 name = "noodles-csi"
-version = "0.30.0"
+version = "0.37.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a60dfe0919f7ecbd081a82eb1d32e8f89f9041932d035fe8309073c8c01277bf"
+checksum = "e4bc8001c54f1d8e47e1ac6041a5f27edc99b68bacea3fade9c89059de285aea"
 dependencies = [
  "bit-vec",
  "byteorder",
  "indexmap",
  "noodles-bgzf",
- "noodles-core 0.14.0",
+ "noodles-core",
 ]
 
 [[package]]
 name = "noodles-fasta"
-version = "0.33.0"
+version = "0.42.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e9e953e4e90e6c96e6a384598ebf2ab6d2f5add259ff05a194cf635e892c980"
+checksum = "d60db7c4c514211598f2d7eb38e499e3b42d3eb690779fd0b36f224650c75c82"
 dependencies = [
+ "bstr",
  "bytes",
  "memchr",
  "noodles-bgzf",
- "noodles-core 0.14.0",
+ "noodles-core",
 ]
 
 [[package]]
 name = "noodles-gff"
-version = "0.27.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14f8ec87fe3630f57d6d8ea24cbc2cbd0bfed1fe66238bda7a7c3fb6a36d3713"
+checksum = "adef59012090b5694b58cad0e4426cd18af404803f942d02e664af607d89ee28"
 dependencies = [
  "indexmap",
  "noodles-bgzf",
- "noodles-core 0.14.0",
- "noodles-csi 0.30.0",
+ "noodles-core",
+ "noodles-csi",
  "percent-encoding",
 ]
 
 [[package]]
 name = "noodles-sam"
-version = "0.49.0"
+version = "0.63.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b94966806ac7aec118d41eea7080bfbd0e8b843ba64f46522c57f0f55cfb1f0"
+checksum = "460564b59da27a291616ea9f515e8eda8624a5d64b214423fcf1f1819b05cd78"
 dependencies = [
  "bitflags",
+ "bstr",
  "indexmap",
  "lexical-core",
  "memchr",
  "noodles-bgzf",
- "noodles-core 0.13.0",
- "noodles-csi 0.29.0",
+ "noodles-core",
+ "noodles-csi",
 ]
 
 [[package]]
 name = "noodles-tabix"
-version = "0.36.0"
+version = "0.43.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc1ab29335a68d0c2bdf41460a67714ca69e23a1cbeb950ac5c38a9afa446a62"
+checksum = "545e16e229b7f8734b0a2a36bd4c98a5b70128663b16b5201ddadc0d09c28d4a"
 dependencies = [
  "bit-vec",
  "byteorder",
  "indexmap",
  "noodles-bgzf",
- "noodles-core 0.14.0",
- "noodles-csi 0.30.0",
+ "noodles-core",
+ "noodles-csi",
 ]
 
 [[package]]
 name = "noodles-vcf"
-version = "0.49.0"
+version = "0.62.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e1f2fa749afaccadc596ec55ccb7bdcd8101fa79f8382384223c0dbae3e245b"
+checksum = "c6f64c43315f757fe42ae014cf83996698cc9e47388080db165d0eb7b5f74092"
 dependencies = [
  "indexmap",
  "memchr",
  "noodles-bgzf",
- "noodles-core 0.14.0",
- "noodles-csi 0.30.0",
+ "noodles-core",
+ "noodles-csi",
  "noodles-tabix",
  "percent-encoding",
 ]
@@ -1101,6 +1191,12 @@ dependencies = [
  "vcpkg",
 ]
 
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
 [[package]]
 name = "pandora_lib_variants"
 version = "0.1.0"
@@ -1119,8 +1215,8 @@ dependencies = [
  "log",
  "noodles-bam",
  "noodles-bgzf",
- "noodles-core 0.14.0",
- "noodles-csi 0.30.0",
+ "noodles-core",
+ "noodles-csi",
  "noodles-fasta",
  "noodles-gff",
  "noodles-sam",
@@ -1152,7 +1248,7 @@ dependencies = [
  "libc",
  "redox_syscall",
  "smallvec",
- "windows-targets",
+ "windows-targets 0.52.5",
 ]
 
 [[package]]
@@ -1346,9 +1442,9 @@ dependencies = [
 
 [[package]]
 name = "regex"
-version = "1.10.5"
+version = "1.10.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f"
+checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -1375,9 +1471,9 @@ checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
 
 [[package]]
 name = "rusqlite"
-version = "0.30.0"
+version = "0.31.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d"
+checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae"
 dependencies = [
  "bitflags",
  "fallible-iterator",
@@ -1389,9 +1485,9 @@ dependencies = [
 
 [[package]]
 name = "rust-htslib"
-version = "0.44.1"
+version = "0.47.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c7eb0f29fce64a4e22578905efef3d72389058016023279a58b282eb5c0c467"
+checksum = "41f1796800e73ebb282c6fc5c03f1fe160e867e01114a58a7e115ee3c1d02482"
 dependencies = [
  "bio-types",
  "byteorder",
@@ -1401,6 +1497,7 @@ dependencies = [
  "ieee754",
  "lazy_static",
  "libc",
+ "libz-sys",
  "linear-map",
  "newtype_derive",
  "regex",
@@ -1417,6 +1514,12 @@ dependencies = [
  "num-traits",
 ]
 
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
 [[package]]
 name = "rustc_version"
 version = "0.1.7"
@@ -1461,18 +1564,18 @@ checksum = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac"
 
 [[package]]
 name = "serde"
-version = "1.0.202"
+version = "1.0.204"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395"
+checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.202"
+version = "1.0.204"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838"
+checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1492,19 +1595,34 @@ dependencies = [
 
 [[package]]
 name = "serde_rusqlite"
-version = "0.34.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4600dac14aada464c5584d327baa164e372153309bc4c0fb1498bbfbaa5a028b"
+checksum = "836d903d9524cecbcd7b75745b6ee0e3f3774b878ea489dfaf2ea749463283d6"
 dependencies = [
  "rusqlite",
  "serde",
 ]
 
+[[package]]
+name = "serde_spanned"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
 [[package]]
 name = "simba"
-version = "0.6.0"
+version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0b7840f121a46d63066ee7a99fc81dcabbc6105e437cae43528cea199b5a05f"
+checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae"
 dependencies = [
  "approx",
  "num-complex",
@@ -1533,12 +1651,11 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
 
 [[package]]
 name = "statrs"
-version = "0.16.0"
+version = "0.17.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d08e5e1748192713cc281da8b16924fb46be7b0c2431854eadc785823e5696e"
+checksum = "f697a07e4606a0a25c044de247e583a330dbb1731d11bc7350b81f48ad567255"
 dependencies = [
  "approx",
- "lazy_static",
  "nalgebra",
  "num-traits",
  "rand",
@@ -1596,15 +1713,6 @@ dependencies = [
  "winapi",
 ]
 
-[[package]]
-name = "termcolor"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
-dependencies = [
- "winapi-util",
-]
-
 [[package]]
 name = "thiserror"
 version = "1.0.60"
@@ -1642,13 +1750,38 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
 [[package]]
 name = "toml"
-version = "0.5.11"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
 dependencies = [
  "serde",
 ]
 
+[[package]]
+name = "toml_edit"
+version = "0.22.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
 [[package]]
 name = "trc"
 version = "1.2.4"
@@ -1735,9 +1868,9 @@ dependencies = [
 
 [[package]]
 name = "uuid"
-version = "1.8.0"
+version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0"
+checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314"
 dependencies = [
  "getrandom",
  "serde",
@@ -1787,28 +1920,43 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 
-[[package]]
-name = "winapi-util"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
-dependencies = [
- "windows-sys",
-]
-
 [[package]]
 name = "winapi-x86_64-pc-windows-gnu"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
 [[package]]
 name = "windows-sys"
 version = "0.52.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
 dependencies = [
- "windows-targets",
+ "windows-targets 0.52.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
 ]
 
 [[package]]
@@ -1817,28 +1965,46 @@ version = "0.52.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
 dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
+ "windows_aarch64_gnullvm 0.52.5",
+ "windows_aarch64_msvc 0.52.5",
+ "windows_i686_gnu 0.52.5",
  "windows_i686_gnullvm",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
+ "windows_i686_msvc 0.52.5",
+ "windows_x86_64_gnu 0.52.5",
+ "windows_x86_64_gnullvm 0.52.5",
+ "windows_x86_64_msvc 0.52.5",
 ]
 
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
 [[package]]
 name = "windows_aarch64_gnullvm"
 version = "0.52.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
 
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
 [[package]]
 name = "windows_aarch64_msvc"
 version = "0.52.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
 
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
 [[package]]
 name = "windows_i686_gnu"
 version = "0.52.5"
@@ -1851,30 +2017,63 @@ version = "0.52.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
 
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
 [[package]]
 name = "windows_i686_msvc"
 version = "0.52.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
 
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
 [[package]]
 name = "windows_x86_64_gnu"
 version = "0.52.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
 
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
 [[package]]
 name = "windows_x86_64_gnullvm"
 version = "0.52.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
 
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
 [[package]]
 name = "windows_x86_64_msvc"
 version = "0.52.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
 
+[[package]]
+name = "winnow"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f"
+dependencies = [
+ "memchr",
+]
+
 [[package]]
 name = "zerocopy"
 version = "0.7.34"

+ 23 - 25
Cargo.toml

@@ -7,41 +7,39 @@ include = ["src/**/*"]
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-log = "^0.4.20"
-env_logger = "^0.10.1"
-clap = { version = "^4.3.16", features = ["derive"] }
-anyhow = "^1.0.75"
+log = "^0.4.22"
+env_logger = "^0.11.5"
+clap = { version = "^4.5.13", features = ["derive"] }
+anyhow = "^1.0.86"
 indicatif = {version = "0.17.8", features = ["rayon"]}
 indicatif-log-bridge = "0.2.2"
 num-integer = "0.1.46"
-# kdam = "0.5.1"
-# pbr = "1.1.1"
-serde = { version = "^1.0.188", features = ["derive"] }
-confy = "0.5.1"
-hashbrown = { version = "0.14.3", features = ["rayon", "serde"] }
+serde = { version = "^1.0.204", features = ["derive"] }
+confy = "0.6.1"
+hashbrown = { version = "0.14.5", features = ["rayon", "serde"] }
 serde_json = "1.0"
 bgzip = "0.3.1"
 rust-lapper = "1.1.0"
 csv = "1.3.0"
-statrs = "0.16.0"
-rust-htslib = "0.44.1"
-uuid = { version = "1.6.1", features = ["serde", "v4"] }
+statrs = "0.17.1"
+rust-htslib = "0.47.0"
+uuid = { version = "1.10.0", features = ["serde", "v4"] }
 prettytable-rs = "^0.10"
-noodles-core = "0.14.0"
-noodles-gff = "0.27.0"
-noodles-bgzf = "0.26.0"
-noodles-csi = "0.30.0"
-noodles-fasta = "0.33.0"
-noodles-sam = "0.49.0"
-noodles-bam = "0.52.0"
-noodles-vcf = "0.49.0"
-noodles-tabix = "0.36.0"
-rayon = "1.8.0"
-serde_rusqlite = "0.34.0"
-dashmap = { version = "5.5.3", features = ["rayon", "serde"] }
+noodles-core = "0.15.0"
+noodles-gff = "0.35.0"
+noodles-bgzf = "0.32.0"
+noodles-csi = "0.37.0"
+noodles-fasta = "0.42.0"
+noodles-sam = "0.63.0"
+noodles-bam = "0.66.0"
+noodles-vcf = "0.62.0"
+noodles-tabix = "0.43.0"
+rayon = "1.10.0"
+serde_rusqlite = "0.35.0"
+dashmap = { version = "6.0.1", features = ["rayon", "serde"] }
 crossbeam-deque = "0.8.5"
 trc = "1.2.4"
 pot = "=3.0.0"
 utoipa = "4.2.3"
-regex = "1.10.5"
+regex = "1.10.6"
 

+ 106 - 92
src/in_out/vcf_writer.rs

@@ -1,28 +1,28 @@
-use bgzf::{VirtualPosition, Writer};
 use log::info;
-use noodles_csi::{self as csi, binning_index::index::reference_sequence::bin::Chunk};
-// use noodles_csi::{self as csi, index::reference_sequence::bin::Chunk};
 use noodles_bgzf as bgzf;
+use noodles_csi::{self as csi};
 use noodles_tabix as tabix;
-use tabix::index::Indexer;
+use vcf::variant::io::Write;
+use vcf::variant::record_buf::AlternateBases;
+use vcf::variant::RecordBuf;
 
-use std::io::{BufRead, Write};
+use std::io::BufRead;
 use std::{fs::File, io};
 
+use crate::in_out::get_reader;
+use crate::{in_out::dict_reader::read_dict, variants::Variant};
 use anyhow::{Ok, Result};
+use noodles_core::position::Position;
 use noodles_vcf::{
     self as vcf,
     header::record::value::{
         map::{Contig, Format},
         Map,
     },
-    record::{genotypes::keys::key, Genotypes, Position},
 };
+use vcf::variant::record::samples::keys::key;
 use vcf::Header;
 
-use crate::in_out::get_reader;
-use crate::{in_out::dict_reader::read_dict, variants::Variant};
-
 fn get_vcf_header(dict_file: &str) -> Result<Header> {
     // let mut header: Vec<String> = vec!["##fileformat=VCFv4.2".to_string()];
     //
@@ -46,12 +46,12 @@ fn get_vcf_header(dict_file: &str) -> Result<Header> {
     // );
 
     let mut header = vcf::Header::builder()
-        .add_format(key::READ_DEPTH, Map::<Format>::from(&key::READ_DEPTH))
-        .add_format(key::READ_DEPTHS, Map::<Format>::from(&key::READ_DEPTHS))
+        .add_format(key::READ_DEPTH, Map::<Format>::from(key::READ_DEPTH))
+        .add_format(key::READ_DEPTHS, Map::<Format>::from(key::READ_DEPTHS))
         .add_sample_name("LOH")
         .build();
 
-    for (ctg, len) in read_dict(&dict_file)? {
+    for (ctg, len) in read_dict(dict_file)? {
         let mut contig = Map::<Contig>::new();
         *contig.length_mut() = Some(len as usize);
         header.contigs_mut().insert(ctg.parse()?, contig);
@@ -72,22 +72,25 @@ fn get_vcf_header(dict_file: &str) -> Result<Header> {
     // Ok(header.join("\n"))
 }
 
-pub fn write_vcf(path: &str, data: &mut Vec<Variant>, dict_file: &str) -> Result<()> {
+pub fn write_vcf(path: &str, data: &mut [Variant], dict_file: &str) -> Result<()> {
     let mut writer = File::create(path).map(bgzf::Writer::new)?;
+    let mut writer_vcf = vcf::io::Writer::new(&mut writer);
+
     // let mut indexer = csi::binning_index::Indexer::default().set_header(csi::binning_index::index::header::Builder::vcf().build());
 
-    let mut indexer = tabix::index::Indexer::default();
-    indexer.set_header(csi::binning_index::index::header::Builder::vcf().build());
+    // let mut indexer = tabix::index::Indexer::default();
+    // indexer.set_header(csi::binning_index::index::header::Builder::vcf().build());
 
     // indexer.set_header(csi::binning_index::index::header::Builder::vcf())
     // indexer.set_header(csi::binning_index::index::header::Builder::vcf().build());
 
     let header = get_vcf_header(dict_file)?;
+    writer_vcf.write_header(&header)?;
     // indexer.set_header(csi::binning_index::index::header::Builder::);
-    let hu = header.to_string();
-    writer.write_all(hu.as_bytes())?;
+    // writer.write_all(&buf)?;
+    // buf.clear();
 
-    let mut start_position = writer.virtual_position();
+    // let mut start_position = writer_vcf.get_ref().virtual_position();
     // let mut actual_contig = String::new();
     // let mut actual_id = 0;
 
@@ -96,45 +99,51 @@ pub fn write_vcf(path: &str, data: &mut Vec<Variant>, dict_file: &str) -> Result
         //     actual_contig = row.contig.clone();
         //     actual_id += 1;
         // }
-        let record = vcf::Record::builder()
-            .set_chromosome(row.contig.parse()?)
-            .set_position(Position::from(row.position as usize))
-            .set_ids(i.to_string().parse()?)
-            .set_reference_bases(format!("{}", row.reference).parse()?)
-            .set_alternate_bases(format!("{}", row.alternative).parse()?)
-            .set_genotypes(Genotypes::parse(&row.to_min_string(), &header)?)
-            .build()?;
 
-        writer.write_all(record.to_string().as_bytes())?;
-        writer.write_all("\n".to_string().as_bytes())?;
-        let end_position = writer.virtual_position();
+        let record = RecordBuf::builder()
+            .set_reference_sequence_name(&row.contig)
+            .set_variant_start(Position::new(row.position as usize).unwrap())
+            .set_ids([i.to_string()].into_iter().collect())
+            .set_reference_bases(format!("{}", row.reference))
+            .set_alternate_bases(AlternateBases::from(vec![format!("{}", row.alternative)]))
+            // .set_genotypes(Genotypes::parse(&row.to_min_string(), &header)?)
+            .build();
+
+        writer_vcf.write_variant_record(&header, &record)?;
+        // writer.write_all(record.to_string().as_bytes())?;
+        // writer.write_all("\n".to_string().as_bytes())?;
+        // let end_position = writer.virtual_position();
 
-        let chunk = Chunk::new(start_position, end_position);
+        // let chunk = Chunk::new(start_position, end_position);
 
         // let reference_sequence_name = record.chromosome().to_string();
-        let start = noodles_core::Position::try_from(usize::from(record.position()))
-            .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
-        let end = record
-            .end()
-            .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))
-            .and_then(|position| {
-                noodles_core::Position::try_from(usize::from(position))
-                    .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))
-            })?;
+        // let start = noodles_core::Position::try_from(usize::from(record.position()))
+        //     .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
+        // let start = record.;
+        // let start = record.variant_start().unwrap();
+        // let end = vcf::variant::Record::variant_end(&record, &header)?;
+        // let end = record.variant_end(&header)
+        //     .end()
+        //     .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))
+        //     .and_then(|position| {
+        //         noodles_core::Position::try_from(usize::from(position))
+        //             .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))
+        //     })?;
 
         // indexer.add_record(Some((actual_id - 1, start, end, true)), chunk)?;
-        indexer.add_record(&row.contig, start, end, chunk)?;
+        // indexer.add_record(&row.contig, start, end, chunk)?;
 
         // writer.write_record(&header, &record);
 
-        start_position = end_position;
+        // start_position = end_position;
     }
     // let index = indexer.build(read_dict(&dict_file)?.len());
-    let index = indexer.build();
+    // let index = indexer.build();
 
     // let index_file = File::create(&format!("{}.csi", path)).expect("error creating index file");
     // let mut writer = csi::Writer::new(index_file);
     // csi::write(&format!("{}.csi", path), &index)?;
+    let index = vcf::index(path)?;
     tabix::write(&format!("{}.tbi", path), &index)?;
 
     // writer.write_index(&index)?;
@@ -160,78 +169,85 @@ pub fn write_vcf(path: &str, data: &mut Vec<Variant>, dict_file: &str) -> Result
 
 pub struct VariantWritter {
     path: String,
-    writer: Writer<File>,
+    writer: vcf::io::Writer<bgzf::Writer<File>>,
     header: Header,
-    indexer: Indexer,
-    start_position: VirtualPosition,
+    // indexer: Indexer,
+    // start_position: VirtualPosition,
     id: usize,
 }
 
 impl VariantWritter {
     pub fn new(path: &str, dict_file: &str) -> Result<Self> {
-        let mut writer = File::create(path).map(bgzf::Writer::new)?;
+        let mut writer = vcf::io::Writer::new(File::create(path).map(bgzf::Writer::new)?);
+
+        // let mut writer = File::create(path).map(bgzf::Writer::new)?;
         let mut indexer = tabix::index::Indexer::default();
         indexer.set_header(csi::binning_index::index::header::Builder::vcf().build());
+
         let header = get_vcf_header(dict_file)?;
-        let hs = header.to_string();
-        writer.write_all(hs.as_bytes())?;
+        writer.write_header(&header)?;
+        // let hs = header.to_string();
+        // writer.write_all(hs.as_bytes())?;
 
-        let start_position = writer.virtual_position();
+        // let start_position = writer.virtual_position();
         Ok(Self {
             path: path.to_string(),
             writer,
             header,
-            indexer,
-            start_position,
+            // indexer,
+            // start_position,
             id: 0,
         })
     }
     pub fn write_variant(&mut self, row: &mut Variant) -> Result<()> {
-        let record = vcf::Record::builder()
-            .set_chromosome(row.contig.parse()?)
-            .set_position(Position::from(row.position as usize))
+        let record = RecordBuf::builder()
+            .set_reference_sequence_name(&row.contig)
+            .set_variant_start(Position::new(row.position as usize).unwrap())
             // .set_ids(Ids::default())
-            .set_ids(self.id.to_string().parse()?)
-            .set_reference_bases(format!("{}", row.reference).parse()?)
-            .set_alternate_bases(format!("{}", row.alternative).parse()?)
-            .set_genotypes(Genotypes::parse(&row.to_min_string(), &self.header)?)
-            .build()?;
+            .set_ids([self.id.to_string()].into_iter().collect())
+            .set_reference_bases(format!("{}", row.reference))
+            .set_alternate_bases(AlternateBases::from(vec![format!("{}", row.alternative)]))
+            // .set_genotypes(Genotypes::parse(&row.to_min_string(), &self.header)?)
+            .build();
 
         // self.writer.write
-        self.writer.write(record.to_string().as_bytes()).unwrap();
+
+        self.writer.write_variant_record(&self.header, &record)?;
+        // self.writer.write(record.to_string().as_bytes()).unwrap();
         // info!("{:?}", record);
-        self.writer.write("\n".to_string().as_bytes())?;
-        self.writer.flush()?;
+        // self.writer.write("\n".to_string().as_bytes())?;
+        // self.writer.flush()?;
         self.id += 1;
-        let end_position = self.writer.virtual_position();
+        // let end_position = self.writer.virtual_position();
 
-        let chunk = Chunk::new(self.start_position, end_position);
+        // let chunk = Chunk::new(self.start_position, end_position);
 
         // let reference_sequence_name = record.chromosome().to_string();
-        let start = noodles_core::Position::try_from(usize::from(record.position()))
-            .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
-        let end = record
-            .end()
-            .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))
-            .and_then(|position| {
-                noodles_core::Position::try_from(usize::from(position))
-                    .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))
-            })?;
-
-        // indexer.add_record(Some((actual_id - 1, start, end, true)), chunk)?;
-        self.indexer.add_record(&row.contig, start, end, chunk)?;
-
-        // writer.write_record(&header, &record);
-
-        self.start_position = end_position;
+        // let start = noodles_core::Position::try_from(usize::from(record.position()))
+        //     .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
+        // let end = record
+        //     .end()
+        //     .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))
+        //     .and_then(|position| {
+        //         noodles_core::Position::try_from(usize::from(position))
+        //             .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))
+        //     })?;
+        //
+        // // indexer.add_record(Some((actual_id - 1, start, end, true)), chunk)?;
+        // self.indexer.add_record(&row.contig, start, end, chunk)?;
+        //
+        // // writer.write_record(&header, &record);
+        //
+        // self.start_position = end_position;
         Ok(())
     }
     pub fn write_index_finish(&mut self) -> Result<()> {
         // self.writer.finish();
-        let mut idx = Indexer::default();
-        std::mem::swap(&mut idx, &mut self.indexer);
-        // std::mem::replace(&mut self.indexer, Indexer::default());
-        let index = idx.build();
+        // let mut idx = Indexer::default();
+        // std::mem::swap(&mut idx, &mut self.indexer);
+        // // std::mem::replace(&mut self.indexer, Indexer::default());
+        // let index = idx.build();
+        let index = vcf::index(&self.path)?;
         tabix::write(&format!("{}.tbi", &self.path), &index)?;
 
         Ok(())
@@ -327,16 +343,14 @@ impl VariantWritter {
 pub fn vcf_header_from(path: &str) -> Result<String> {
     info!("Parsing {} for Header", path);
 
-    let reader = io::BufReader::new(get_reader(&path)?);
+    let reader = io::BufReader::new(get_reader(path)?);
 
     let mut res = Vec::new();
-    for line in reader.lines() {
-        if let std::result::Result::Ok(line) = line {
-            if line.starts_with("#") {
-                res.push(line);
-            } else {
-                break;
-            }
+    for line in reader.lines().map_while(Result::ok) {
+        if line.starts_with("#") {
+            res.push(line);
+        } else {
+            break;
         }
     }
 

+ 4 - 5
src/lib.rs

@@ -11,6 +11,7 @@ mod tests {
     use anyhow::{Ok, Result};
     use indicatif::MultiProgress;
     use indicatif_log_bridge::LogWrapper;
+    use log::info;
     use noodles_core::{Position, Region};
 
     use crate::{
@@ -20,8 +21,6 @@ mod tests {
         variants::{Category, Variants},
     };
 
-    use self::annotations::pangolin::pangolin_parse_results;
-
     use super::*;
     #[test]
     fn get_config() -> Result<()> {
@@ -32,7 +31,7 @@ mod tests {
 
     #[test]
     fn load_from_vcf() -> Result<()> {
-        let name = "HATTAB";
+        let name = "PASSARD";
 
         let logger =
             env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info"))
@@ -111,7 +110,7 @@ mod tests {
 
     #[test]
     fn p_pangolin() -> Result<()> {
-        let name = "BECERRA";
+        let name = "KHABER";
         let logger =
             env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info"))
                 .build();
@@ -129,7 +128,7 @@ mod tests {
 
         println!("{u:?}");
 
-        assert_eq!(u.len(), 3);
+        // assert_eq!(u.len(), 3);
 
         Ok(())
     }

+ 2 - 1
src/variants.rs

@@ -1722,8 +1722,9 @@ pub fn run_pipe(name: &str, multi: &MultiProgress) -> Result<()> {
 
     variants.merge();
     variants.sort()?;
-    variants.vep();
     info!("Variants retained: {}", variants.len());
+    variants.vep();
+    variants.pangolin()?;
 
     variants.annotate_gff_feature(&cfg.gff_path)?;