Added record struct, de- &serializes and to modify target url.

This commit is contained in:
2025-06-05 02:26:49 +02:00
parent 49eab01537
commit 0a7d72825f
3 changed files with 153 additions and 2 deletions
Generated
+98
View File
@@ -2,6 +2,104 @@
# It is not intended for manual editing. # It is not intended for manual editing.
version = 4 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]] [[package]]
name = "seo_url_alter" name = "seo_url_alter"
version = "0.1.0" 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"
+2
View File
@@ -4,3 +4,5 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
csv = "1.3.1"
serde = { version = "1.0.219", features = ["derive"] }
+53 -2
View File
@@ -1,3 +1,54 @@
fn main() { use std::fs::File;
println!("Hello, world!"); use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Debug)]
struct Record {
source_url: String,
target_url: Option<String>,
http_code: Option<String>,
enabled: Option<String>,
query_params_handling: Option<String>,
sales_channel_id: Option<String>,
}
fn main() -> Result<(), csv::Error> {
let file = File::open("seo_url.csv")?;
let mut rdr = csv::Reader::from_reader(file);
let mut records: Vec<Record> = Vec::new();
for result in rdr.deserialize() {
let mut record: Record = result?;
//println!("{:?}", record);
let mut temp_target_url: Vec<String> = 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(())
} }