From 0a7d72825f7023d00ced648bef52c3b606a5883c Mon Sep 17 00:00:00 2001 From: Matthias Lodner Date: Thu, 5 Jun 2025 02:26:49 +0200 Subject: [PATCH] Added record struct, de- &serializes and to modify target url. --- Cargo.lock | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 2 ++ src/main.rs | 55 ++++++++++++++++++++++++++++-- 3 files changed, 153 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 16cfb3e..a745c56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,104 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "csv" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +dependencies = [ + "memchr", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + [[package]] name = "seo_url_alter" version = "0.1.0" +dependencies = [ + "csv", + "serde", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "syn" +version = "2.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" diff --git a/Cargo.toml b/Cargo.toml index 73ed7f4..eedfd04 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,3 +4,5 @@ version = "0.1.0" edition = "2024" [dependencies] +csv = "1.3.1" +serde = { version = "1.0.219", features = ["derive"] } diff --git a/src/main.rs b/src/main.rs index e7a11a9..d3029b7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,54 @@ -fn main() { - println!("Hello, world!"); +use std::fs::File; +use serde::{Deserialize, Serialize}; + +#[derive(Deserialize, Serialize, Debug)] +struct Record { + source_url: String, + target_url: Option, + http_code: Option, + enabled: Option, + query_params_handling: Option, + sales_channel_id: Option, +} + +fn main() -> Result<(), csv::Error> { + let file = File::open("seo_url.csv")?; + let mut rdr = csv::Reader::from_reader(file); + + let mut records: Vec = Vec::new(); + + for result in rdr.deserialize() { + let mut record: Record = result?; + //println!("{:?}", record); + + let mut temp_target_url: Vec = record.source_url.split("/").map(|s| s.to_string()).collect(); + + // Modify to new target url + temp_target_url.remove(temp_target_url.len() - 2); // Remove number before product name + + + // Combine to new target url + let target_url = temp_target_url.join("/"); + record.target_url = Some(target_url); + + record.http_code = Some("301".to_string()); + record.enabled = Some("1".to_string()); + record.query_params_handling = Some("0".to_string()); + record.sales_channel_id = Some("".to_string()); + + records.push(record) + } + + + + let new_csv = File::create("redirects.csv")?; + let mut wtr = csv::Writer::from_writer(new_csv); + + for record in records { + wtr.serialize(record)?; + } + + wtr.flush()?; + + Ok(()) }