summaryrefslogtreecommitdiff
path: root/src/geoparsers/geoip2.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/geoparsers/geoip2.rs')
-rw-r--r--src/geoparsers/geoip2.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/geoparsers/geoip2.rs b/src/geoparsers/geoip2.rs
new file mode 100644
index 0000000..9e8f29d
--- /dev/null
+++ b/src/geoparsers/geoip2.rs
@@ -0,0 +1,41 @@
+use ipnet::IpNet;
+use crate::config::NSCConfig;
+
+/// Enum for declaring GeoSite/IP routing
+pub enum RouteType {
+ /// GeoSite MMDB type, like `category-ads-all`
+ GeoSite(String),
+ /// Subnet
+ GeoIp(IpNet),
+}
+
+/// Routing actions
+pub enum RouteAction {
+ Block,
+ Proxy,
+ Direct,
+}
+
+/// Type for declaring the routing rules like:
+/// ```toml
+/// [rule]
+/// action = enum RouteAction
+/// target = enum RouteType
+///
+/// [rule]
+/// target = "geosite:category-ads-all"
+/// action = "block"
+/// ```
+pub struct Rule {
+ pub target: RouteType,
+ pub action: RouteAction,
+}
+
+pub fn parse_ruleset(config: NSCConfig) -> Result<Vec<Rule>, Box<dyn std::error::Error>> {
+ let reader = maxminddb::Reader::open_readfile(config.geo_files[0].clone())?;
+
+
+ // Ok(())
+ todo!();
+}
+