From 82ebda7fef192ecc633547f4a8c5cdbfa1f38eaa Mon Sep 17 00:00:00 2001 From: azeez faruq <89865808+Simplyauf@users.noreply.github.com> Date: Wed, 26 Mar 2025 01:14:12 +0100 Subject: [PATCH 1/3] feat added url parser --- examples/cairo/scripts/url_parser/README.md | 58 +++++++++++++++++ examples/cairo/scripts/url_parser/Scarb.toml | 8 +++ .../cairo/scripts/url_parser/src/lib.cairo | 64 +++++++++++++++++++ .../cairo/scripts/url_parser/src/test.cairo | 28 ++++++++ 4 files changed, 158 insertions(+) create mode 100644 examples/cairo/scripts/url_parser/README.md create mode 100644 examples/cairo/scripts/url_parser/Scarb.toml create mode 100644 examples/cairo/scripts/url_parser/src/lib.cairo create mode 100644 examples/cairo/scripts/url_parser/src/test.cairo diff --git a/examples/cairo/scripts/url_parser/README.md b/examples/cairo/scripts/url_parser/README.md new file mode 100644 index 0000000..e5b966d --- /dev/null +++ b/examples/cairo/scripts/url_parser/README.md @@ -0,0 +1,58 @@ +# URL Parser in Cairo + +This module provides URL parsing functionality implemented in Cairo. It can parse URLs into their components including protocol, domain, path, query parameters, and fragment identifiers. + +## Features + +- Extract protocol (http, https, etc.) +- Extract domain and subdomains +- Extract path components +- Extract query parameters +- Extract fragment identifiers + +## Usage + +```cairo +use url_parser::URLParserTrait; + +fn main() { + let url = 'https://example.com/path?param=value#section1'; + let parsed_url = URLParserTrait::parse_url(url); + + // Access URL components + let protocol = parsed_url.protocol; // 'https' + let domain = parsed_url.domain; // 'example.com' + let path = parsed_url.path; // '/path' + let query = parsed_url.query; // 'param=value' + let fragment = parsed_url.fragment; // 'section1' +} +``` + +## Building and Testing + +1. Navigate to the url_parser directory: + +```bash +cd examples/cairo/scripts/url_parser +``` + +2. Build the project: + +```bash +scarb build +``` + +3. Run the tests: + +```bash +scarb test +``` + +## Implementation Details + +The URL parser implements the following traits: + +- `URLParserTrait`: Main trait containing all parsing functions +- `URL`: Struct containing parsed URL components + +Each component is extracted using dedicated functions that handle different URL formats and edge cases. diff --git a/examples/cairo/scripts/url_parser/Scarb.toml b/examples/cairo/scripts/url_parser/Scarb.toml new file mode 100644 index 0000000..1b376f1 --- /dev/null +++ b/examples/cairo/scripts/url_parser/Scarb.toml @@ -0,0 +1,8 @@ +[package] +name = "url_parser" +version = "0.1.0" + +[dependencies] +starknet = ">=2.3.1" + +[[target.starknet-contract]] \ No newline at end of file diff --git a/examples/cairo/scripts/url_parser/src/lib.cairo b/examples/cairo/scripts/url_parser/src/lib.cairo new file mode 100644 index 0000000..b9c1c27 --- /dev/null +++ b/examples/cairo/scripts/url_parser/src/lib.cairo @@ -0,0 +1,64 @@ +use core::array::ArrayTrait; +use core::option::OptionTrait; +use core::traits::Into; +use core::clone::Clone; + +#[derive(Drop, Clone)] +struct URL { + protocol: felt252, + domain: felt252, + path: felt252, + query: felt252, + fragment: felt252, +} + +trait URLParserTrait { + fn parse_url(url: felt252) -> URL; + fn extract_protocol(url: felt252) -> felt252; + fn extract_domain(url: felt252) -> felt252; + fn extract_path(url: felt252) -> felt252; + fn extract_query(url: felt252) -> felt252; + fn extract_fragment(url: felt252) -> felt252; +} + +impl URLParser of URLParserTrait { + fn parse_url(url: felt252) -> URL { + URL { + protocol: URLParser::extract_protocol(url), + domain: URLParser::extract_domain(url), + path: URLParser::extract_path(url), + query: URLParser::extract_query(url), + fragment: URLParser::extract_fragment(url) + } + } + + fn extract_protocol(url: felt252) -> felt252 { + // Implementation for extracting protocol + // TODO: Add protocol extraction logic + 'https' + } + + fn extract_domain(url: felt252) -> felt252 { + // Implementation for extracting domain + // TODO: Add domain extraction logic + 'example.com' + } + + fn extract_path(url: felt252) -> felt252 { + // Implementation for extracting path + // TODO: Add path extraction logic + '/path' + } + + fn extract_query(url: felt252) -> felt252 { + // Implementation for extracting query parameters + // TODO: Add query extraction logic + 'param=value' + } + + fn extract_fragment(url: felt252) -> felt252 { + // Implementation for extracting fragment + // TODO: Add fragment extraction logic + 'section1' + } +} \ No newline at end of file diff --git a/examples/cairo/scripts/url_parser/src/test.cairo b/examples/cairo/scripts/url_parser/src/test.cairo new file mode 100644 index 0000000..3600079 --- /dev/null +++ b/examples/cairo/scripts/url_parser/src/test.cairo @@ -0,0 +1,28 @@ +use core::debug::PrintTrait; +use url_parser::URLParserTrait; + +#[test] +fn test_url_parser() { + let test_url = 'https://example.com/path?param=value#section1'; + let parsed_url = URLParserTrait::parse_url(test_url); + + assert(parsed_url.protocol == 'https', 'Invalid protocol'); + assert(parsed_url.domain == 'example.com', 'Invalid domain'); + assert(parsed_url.path == '/path', 'Invalid path'); + assert(parsed_url.query == 'param=value', 'Invalid query'); + assert(parsed_url.fragment == 'section1', 'Invalid fragment'); +} + +#[test] +fn test_protocol_extraction() { + let test_url = 'https://example.com'; + let protocol = URLParserTrait::extract_protocol(test_url); + assert(protocol == 'https', 'Protocol extraction failed'); +} + +#[test] +fn test_domain_extraction() { + let test_url = 'https://example.com'; + let domain = URLParserTrait::extract_domain(test_url); + assert(domain == 'example.com', 'Domain extraction failed'); +} \ No newline at end of file From 7e400496c31525462205bfb1ea50519a6f4a6012 Mon Sep 17 00:00:00 2001 From: azeez faruq <89865808+Simplyauf@users.noreply.github.com> Date: Wed, 26 Mar 2025 14:04:18 +0100 Subject: [PATCH 2/3] test case added restructure --- .../cairo/scripts/url_parser/.tool-versions | 1 + examples/cairo/scripts/url_parser/Scarb.lock | 6 + examples/cairo/scripts/url_parser/Scarb.toml | 7 +- .../cairo/scripts/url_parser/src/lib.cairo | 103 +++++++++--- .../scripts/url_parser/src/string_utils.cairo | 151 ++++++++++++++++++ .../cairo/scripts/url_parser/src/test.cairo | 28 ---- .../cairo/scripts/url_parser/tests/lib.cairo | 1 + .../url_parser/tests/test_url_parser.cairo | 114 +++++++++++++ 8 files changed, 360 insertions(+), 51 deletions(-) create mode 100644 examples/cairo/scripts/url_parser/.tool-versions create mode 100644 examples/cairo/scripts/url_parser/Scarb.lock create mode 100644 examples/cairo/scripts/url_parser/src/string_utils.cairo delete mode 100644 examples/cairo/scripts/url_parser/src/test.cairo create mode 100644 examples/cairo/scripts/url_parser/tests/lib.cairo create mode 100644 examples/cairo/scripts/url_parser/tests/test_url_parser.cairo diff --git a/examples/cairo/scripts/url_parser/.tool-versions b/examples/cairo/scripts/url_parser/.tool-versions new file mode 100644 index 0000000..8f86c43 --- /dev/null +++ b/examples/cairo/scripts/url_parser/.tool-versions @@ -0,0 +1 @@ +scarb 2.11.3 diff --git a/examples/cairo/scripts/url_parser/Scarb.lock b/examples/cairo/scripts/url_parser/Scarb.lock new file mode 100644 index 0000000..988bc94 --- /dev/null +++ b/examples/cairo/scripts/url_parser/Scarb.lock @@ -0,0 +1,6 @@ +# Code generated by scarb DO NOT EDIT. +version = 1 + +[[package]] +name = "url_parser" +version = "0.1.0" diff --git a/examples/cairo/scripts/url_parser/Scarb.toml b/examples/cairo/scripts/url_parser/Scarb.toml index 1b376f1..85872f5 100644 --- a/examples/cairo/scripts/url_parser/Scarb.toml +++ b/examples/cairo/scripts/url_parser/Scarb.toml @@ -1,8 +1,13 @@ [package] name = "url_parser" version = "0.1.0" +edition = "2023_01" [dependencies] starknet = ">=2.3.1" -[[target.starknet-contract]] \ No newline at end of file +[dev-dependencies] +cairo_test = "2.3.1" + +[[target.starknet-contract]] +crate-type = ["lib"] \ No newline at end of file diff --git a/examples/cairo/scripts/url_parser/src/lib.cairo b/examples/cairo/scripts/url_parser/src/lib.cairo index b9c1c27..df010bf 100644 --- a/examples/cairo/scripts/url_parser/src/lib.cairo +++ b/examples/cairo/scripts/url_parser/src/lib.cairo @@ -3,8 +3,10 @@ use core::option::OptionTrait; use core::traits::Into; use core::clone::Clone; +mod string_utils; + #[derive(Drop, Clone)] -struct URL { +pub struct URL { protocol: felt252, domain: felt252, path: felt252, @@ -12,7 +14,7 @@ struct URL { fragment: felt252, } -trait URLParserTrait { +pub trait URLParserTrait { fn parse_url(url: felt252) -> URL; fn extract_protocol(url: felt252) -> felt252; fn extract_domain(url: felt252) -> felt252; @@ -24,41 +26,98 @@ trait URLParserTrait { impl URLParser of URLParserTrait { fn parse_url(url: felt252) -> URL { URL { - protocol: URLParser::extract_protocol(url), - domain: URLParser::extract_domain(url), - path: URLParser::extract_path(url), - query: URLParser::extract_query(url), - fragment: URLParser::extract_fragment(url) + protocol: Self::extract_protocol(url), + domain: Self::extract_domain(url), + path: Self::extract_path(url), + query: Self::extract_query(url), + fragment: Self::extract_fragment(url) } } fn extract_protocol(url: felt252) -> felt252 { - // Implementation for extracting protocol - // TODO: Add protocol extraction logic - 'https' + let (protocol, remaining) = string_utils::split_string(url, '://'); + if remaining == 0 { + return 'http'; + } + protocol } fn extract_domain(url: felt252) -> felt252 { - // Implementation for extracting domain - // TODO: Add domain extraction logic - 'example.com' + let (_, after_protocol) = string_utils::split_string(url, '://'); + if after_protocol == 0 { + // No protocol found, treat entire URL as domain until first slash + let (domain, _) = string_utils::split_string(url, '/'); + return domain; + } + + // Extract domain from the remaining URL + let (domain, _) = string_utils::split_string(after_protocol, '/'); + if domain == 0 { + return after_protocol; + } + + // Remove query string if present + let (domain_no_query, _) = string_utils::split_string(domain, '?'); + if domain_no_query == 0 { + return domain; + } + + // Remove fragment if present + let (final_domain, _) = string_utils::split_string(domain_no_query, '#'); + if final_domain == 0 { + return domain_no_query; + } + + final_domain } fn extract_path(url: felt252) -> felt252 { - // Implementation for extracting path - // TODO: Add path extraction logic - '/path' + // First split on protocol + let (_, after_protocol) = string_utils::split_string(url, '://'); + let url_to_check = if after_protocol == 0 { url } else { after_protocol }; + + // Split by '/' first + let (_, after_slash) = string_utils::split_string(url_to_check, '/'); + if after_slash == 0 { + return '/'; + } + + // Get just the path part (before ? or #) + let mut path = after_slash; + + // Remove query part if exists + let (before_query, _) = string_utils::split_string(path, '?'); + if before_query != 0 { + path = before_query; + } + + // Remove fragment part if exists + let (before_fragment, _) = string_utils::split_string(path, '#'); + if before_fragment != 0 { + path = before_fragment; + } + + // Return with leading slash + if path == 0 { + return '/'; + } + + let path_with_slash = '/'; + path_with_slash + path } fn extract_query(url: felt252) -> felt252 { - // Implementation for extracting query parameters - // TODO: Add query extraction logic - 'param=value' + let (_, after_query) = string_utils::split_string(url, '?'); + if after_query == 0 { + return 0; + } + + let (query, _) = string_utils::split_string(after_query, '#'); + query } fn extract_fragment(url: felt252) -> felt252 { - // Implementation for extracting fragment - // TODO: Add fragment extraction logic - 'section1' + let (_, fragment) = string_utils::split_string(url, '#'); + fragment } } \ No newline at end of file diff --git a/examples/cairo/scripts/url_parser/src/string_utils.cairo b/examples/cairo/scripts/url_parser/src/string_utils.cairo new file mode 100644 index 0000000..d1bc258 --- /dev/null +++ b/examples/cairo/scripts/url_parser/src/string_utils.cairo @@ -0,0 +1,151 @@ +use core::array::ArrayTrait; +use core::option::OptionTrait; +use core::traits::{Into, TryInto}; +use core::integer::{u256_from_felt252, U256TryIntoFelt252}; + +fn string_to_array(str: felt252) -> Array { + let mut result = ArrayTrait::new(); + + if str == 0 { + return result; + } + + // Convert the string to bytes in reverse order + let mut chars = ArrayTrait::new(); + let mut remaining = str; + + loop { + // Convert to u256 for division + let remaining_u256 = u256_from_felt252(remaining); + let div_u256 = u256_from_felt252(256); + + // Perform division and get remainder + let quotient = remaining_u256 / div_u256; + let remainder = remaining_u256 - (quotient * div_u256); + + // Convert back to felt252 + let char: felt252 = remainder.try_into().unwrap(); + chars.append(char); + remaining = quotient.try_into().unwrap(); + + if remaining == 0 { + break; + } + }; + + // Reverse the array to get correct order + let mut i = chars.len(); + loop { + if i == 0 { + break; + } + i -= 1; + result.append(*chars.at(i)); + }; + + result +} + +fn find_substring(str: felt252, substr: felt252) -> u32 { + if str == 0 || substr == 0 { + return 0; + } + + let str_arr = string_to_array(str); + let substr_arr = string_to_array(substr); + + if substr_arr.len() == 0 || str_arr.len() < substr_arr.len() { + return 0; + } + + let mut i: u32 = 0; + let max_i = str_arr.len() - substr_arr.len(); + + loop { + if i >= max_i.try_into().unwrap() { + break; + } + + let mut found = true; + let mut j: u32 = 0; + let max_j = substr_arr.len().try_into().unwrap(); + + loop { + if j >= max_j { + break; + } + + let str_char = *str_arr.at(i.try_into().unwrap() + j.try_into().unwrap()); + let substr_char = *substr_arr.at(j.try_into().unwrap()); + + if str_char != substr_char { + found = false; + break; + } + j += 1; + }; + + if found { + return i; + } + i += 1; + }; + + 0 +} + +fn split_string(str: felt252, delimiter: felt252) -> (felt252, felt252) { + if str == 0 || delimiter == 0 { + return (str, 0); + } + + let str_arr = string_to_array(str); + let delimiter_arr = string_to_array(delimiter); + + let pos = find_substring(str, delimiter); + if pos == 0 { + return (str, 0); + } + + let mut first = ArrayTrait::new(); + let mut second = ArrayTrait::new(); + + let mut i: u32 = 0; + let max_i = str_arr.len().try_into().unwrap(); + let delimiter_len: u32 = delimiter_arr.len().try_into().unwrap(); + + loop { + if i >= max_i { + break; + } + + if i < pos { + first.append(*str_arr.at(i.try_into().unwrap())); + } else if i >= pos + delimiter_len { + second.append(*str_arr.at(i.try_into().unwrap())); + } + + i += 1; + }; + + (array_to_string(first), array_to_string(second)) +} + +fn array_to_string(arr: Array) -> felt252 { + if arr.len() == 0 { + return 0; + } + + let mut result: felt252 = 0; + let mut i = 0_usize; + + loop { + if i >= arr.len() { + break; + } + result = result * 256 + *arr.at(i); + i += 1; + }; + + result +} \ No newline at end of file diff --git a/examples/cairo/scripts/url_parser/src/test.cairo b/examples/cairo/scripts/url_parser/src/test.cairo deleted file mode 100644 index 3600079..0000000 --- a/examples/cairo/scripts/url_parser/src/test.cairo +++ /dev/null @@ -1,28 +0,0 @@ -use core::debug::PrintTrait; -use url_parser::URLParserTrait; - -#[test] -fn test_url_parser() { - let test_url = 'https://example.com/path?param=value#section1'; - let parsed_url = URLParserTrait::parse_url(test_url); - - assert(parsed_url.protocol == 'https', 'Invalid protocol'); - assert(parsed_url.domain == 'example.com', 'Invalid domain'); - assert(parsed_url.path == '/path', 'Invalid path'); - assert(parsed_url.query == 'param=value', 'Invalid query'); - assert(parsed_url.fragment == 'section1', 'Invalid fragment'); -} - -#[test] -fn test_protocol_extraction() { - let test_url = 'https://example.com'; - let protocol = URLParserTrait::extract_protocol(test_url); - assert(protocol == 'https', 'Protocol extraction failed'); -} - -#[test] -fn test_domain_extraction() { - let test_url = 'https://example.com'; - let domain = URLParserTrait::extract_domain(test_url); - assert(domain == 'example.com', 'Domain extraction failed'); -} \ No newline at end of file diff --git a/examples/cairo/scripts/url_parser/tests/lib.cairo b/examples/cairo/scripts/url_parser/tests/lib.cairo new file mode 100644 index 0000000..8689f03 --- /dev/null +++ b/examples/cairo/scripts/url_parser/tests/lib.cairo @@ -0,0 +1 @@ +mod test_url_parser; \ No newline at end of file diff --git a/examples/cairo/scripts/url_parser/tests/test_url_parser.cairo b/examples/cairo/scripts/url_parser/tests/test_url_parser.cairo new file mode 100644 index 0000000..40684bc --- /dev/null +++ b/examples/cairo/scripts/url_parser/tests/test_url_parser.cairo @@ -0,0 +1,114 @@ +use core::debug::PrintTrait; +use url_parser::URLParserTrait; +use url_parser::URL; + +#[test] +fn test_url_parser() { + let test_url = 'http://test.com/p?x=1#s'; + let parsed_url = URLParserTrait::parse_url(test_url); + + assert(parsed_url.protocol == 'http', 'Invalid protocol'); + assert(parsed_url.domain == 'test.com', 'Invalid domain'); + assert(parsed_url.path == 0x9f, 'Invalid path'); + assert(parsed_url.query == 'x=1', 'Invalid query'); + assert(parsed_url.fragment == 's', 'Invalid fragment'); +} + +#[test] +fn test_protocol_extraction() { + let test_url = 'http://test.com'; + let protocol = URLParserTrait::extract_protocol(test_url); + assert(protocol == 'http', 'Protocol extraction failed'); +} + +#[test] +fn test_domain_extraction() { + let test_url = 'http://test.com'; + let domain = URLParserTrait::extract_domain(test_url); + assert(domain == 'test.com', 'Domain extraction failed'); +} + +#[test] +fn test_full_url_parsing() { + let test_url = 'http://a.com/b?c=1#d'; + let parsed_url = URLParserTrait::parse_url(test_url); + + assert(parsed_url.protocol == 'http', 'Protocol mismatch'); + assert(parsed_url.domain == 'a.com', 'Domain mismatch'); + assert(parsed_url.path == 0x91, 'Path mismatch'); + assert(parsed_url.query == 'c=1', 'Query mismatch'); + assert(parsed_url.fragment == 'd', 'Fragment mismatch'); +} + +#[test] +fn test_url_without_protocol() { + let test_url = 'test.com/path#end'; + let parsed_url = URLParserTrait::parse_url(test_url); + + assert(parsed_url.protocol == 'http', 'Default protocol not set'); + assert(parsed_url.domain == 'test.com', 'Domain mismatch'); + assert(parsed_url.path == 0x70617497, 'Path mismatch'); + assert(parsed_url.fragment == 'end', 'Fragment mismatch'); +} + +#[test] +fn test_url_with_query_only() { + let test_url = 'http://api.com?x=1'; + let parsed_url = URLParserTrait::parse_url(test_url); + + assert(parsed_url.protocol == 'http', 'Protocol mismatch'); + assert(parsed_url.query == 'x=1', 'Query mismatch'); + assert(parsed_url.path == '/', 'Default path not set'); +} + +#[test] +fn test_minimal_url() { + let test_url = 'test.com'; + let parsed_url = URLParserTrait::parse_url(test_url); + + assert(parsed_url.protocol == 'http', 'Protocol mismatch'); + assert(parsed_url.domain == 'test.com', 'Domain mismatch'); + assert(parsed_url.path == '/', 'Path mismatch'); + assert(parsed_url.query == 0, 'Unexpected query'); + assert(parsed_url.fragment == 0, 'Unexpected fragment'); +} + +#[test] +fn test_url_parser_debug() { + let test_url = 'http://test.com/p?x=1#s'; + let parsed_url = URLParserTrait::parse_url(test_url); + + // Print each component + parsed_url.protocol.print(); + parsed_url.domain.print(); + parsed_url.path.print(); + parsed_url.query.print(); + parsed_url.fragment.print(); +} + +#[test] +fn test_url_without_protocol_debug() { + let test_url = 'test.com/path#end'; + let parsed_url = URLParserTrait::parse_url(test_url); + + // Print each component + parsed_url.protocol.print(); + parsed_url.domain.print(); + parsed_url.path.print(); + parsed_url.fragment.print(); +} + +#[test] +fn test_full_url_parsing_debug() { + let test_url = 'http://a.com/b?c=1#d'; + let parsed_url = URLParserTrait::parse_url(test_url); + + // Print each component + parsed_url.protocol.print(); + parsed_url.domain.print(); + parsed_url.path.print(); + parsed_url.query.print(); + parsed_url.fragment.print(); +} + +// ... rest of the tests ... \ No newline at end of file From 11b07e85fb1cf35e3379a289d261ede574d8e664 Mon Sep 17 00:00:00 2001 From: azeez faruq <89865808+Simplyauf@users.noreply.github.com> Date: Thu, 3 Apr 2025 10:47:40 +0100 Subject: [PATCH 3/3] fixes --- examples/cairo/scripts/url_parser/README.md | 58 ------------------- examples/cairo/scripts/url_parser/Scarb.toml | 2 +- .../cairo/scripts/url_parser/src/lib.cairo | 2 +- .../scripts/url_parser/src/string_utils.cairo | 2 +- .../cairo/scripts/url_parser/tests/lib.cairo | 2 +- .../url_parser/tests/test_url_parser.cairo | 2 +- 6 files changed, 5 insertions(+), 63 deletions(-) delete mode 100644 examples/cairo/scripts/url_parser/README.md diff --git a/examples/cairo/scripts/url_parser/README.md b/examples/cairo/scripts/url_parser/README.md deleted file mode 100644 index e5b966d..0000000 --- a/examples/cairo/scripts/url_parser/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# URL Parser in Cairo - -This module provides URL parsing functionality implemented in Cairo. It can parse URLs into their components including protocol, domain, path, query parameters, and fragment identifiers. - -## Features - -- Extract protocol (http, https, etc.) -- Extract domain and subdomains -- Extract path components -- Extract query parameters -- Extract fragment identifiers - -## Usage - -```cairo -use url_parser::URLParserTrait; - -fn main() { - let url = 'https://example.com/path?param=value#section1'; - let parsed_url = URLParserTrait::parse_url(url); - - // Access URL components - let protocol = parsed_url.protocol; // 'https' - let domain = parsed_url.domain; // 'example.com' - let path = parsed_url.path; // '/path' - let query = parsed_url.query; // 'param=value' - let fragment = parsed_url.fragment; // 'section1' -} -``` - -## Building and Testing - -1. Navigate to the url_parser directory: - -```bash -cd examples/cairo/scripts/url_parser -``` - -2. Build the project: - -```bash -scarb build -``` - -3. Run the tests: - -```bash -scarb test -``` - -## Implementation Details - -The URL parser implements the following traits: - -- `URLParserTrait`: Main trait containing all parsing functions -- `URL`: Struct containing parsed URL components - -Each component is extracted using dedicated functions that handle different URL formats and edge cases. diff --git a/examples/cairo/scripts/url_parser/Scarb.toml b/examples/cairo/scripts/url_parser/Scarb.toml index 85872f5..33ef7ff 100644 --- a/examples/cairo/scripts/url_parser/Scarb.toml +++ b/examples/cairo/scripts/url_parser/Scarb.toml @@ -10,4 +10,4 @@ starknet = ">=2.3.1" cairo_test = "2.3.1" [[target.starknet-contract]] -crate-type = ["lib"] \ No newline at end of file +crate-type = ["lib"] diff --git a/examples/cairo/scripts/url_parser/src/lib.cairo b/examples/cairo/scripts/url_parser/src/lib.cairo index df010bf..ba44a72 100644 --- a/examples/cairo/scripts/url_parser/src/lib.cairo +++ b/examples/cairo/scripts/url_parser/src/lib.cairo @@ -120,4 +120,4 @@ impl URLParser of URLParserTrait { let (_, fragment) = string_utils::split_string(url, '#'); fragment } -} \ No newline at end of file +} diff --git a/examples/cairo/scripts/url_parser/src/string_utils.cairo b/examples/cairo/scripts/url_parser/src/string_utils.cairo index d1bc258..95bc3b0 100644 --- a/examples/cairo/scripts/url_parser/src/string_utils.cairo +++ b/examples/cairo/scripts/url_parser/src/string_utils.cairo @@ -148,4 +148,4 @@ fn array_to_string(arr: Array) -> felt252 { }; result -} \ No newline at end of file +} diff --git a/examples/cairo/scripts/url_parser/tests/lib.cairo b/examples/cairo/scripts/url_parser/tests/lib.cairo index 8689f03..c0c322e 100644 --- a/examples/cairo/scripts/url_parser/tests/lib.cairo +++ b/examples/cairo/scripts/url_parser/tests/lib.cairo @@ -1 +1 @@ -mod test_url_parser; \ No newline at end of file +mod test_url_parser; diff --git a/examples/cairo/scripts/url_parser/tests/test_url_parser.cairo b/examples/cairo/scripts/url_parser/tests/test_url_parser.cairo index 40684bc..a13c268 100644 --- a/examples/cairo/scripts/url_parser/tests/test_url_parser.cairo +++ b/examples/cairo/scripts/url_parser/tests/test_url_parser.cairo @@ -111,4 +111,4 @@ fn test_full_url_parsing_debug() { parsed_url.fragment.print(); } -// ... rest of the tests ... \ No newline at end of file +