Circle Eye Community

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque accumsan ante ut nunc sagittis, ac suscipit sem finibus. Integer ut mollis orci, sed egestas ante. In ultricies mollis fermentum. Curabitur quis ex a justo vehicula vestibulum. Phasellus efficitur dui eleifend, molestie quam et, tempor diam. Morbi vitae metus et ex elementum lobortis. Nunc non risus a orci faucibus gravida.

Mauris varius semper arcu, finibus interdum purus eleifend in. Proin tempus lacus aliquet leo tincidunt, non commodo erat rhoncus. Pellentesque consectetur id est sit amet laoreet. In hac habitasse platea dictumst. Donec dictum porttitor ligula. Praesent porta erat mauris, ut tincidunt sem rhoncus et. Nunc dapibus, nibh vel sodales efficitur, erat odio finibus dolor, quis laoreet est odio eu nisl. Maecenas non rutrum nisl, eget imperdiet elit. In ultricies vitae lectus at ullamcorper.

Aenean vel viverra urna, vel tincidunt enim. Morbi pellentesque maximus metus et bibendum. Aliquam a dolor auctor, vulputate ligula in, posuere nunc. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam pellentesque nibh purus, ut accumsan tortor tristique ut. Praesent in purus ut ipsum bibendum rutrum. Vivamus porttitor nisi sit amet nulla blandit scelerisque. Nullam in dictum nisl. In consequat malesuada velit. Sed vulputate sollicitudin augue. Aenean ac tellus aliquam, pulvinar enim luctus, facilisis ante. Proin sodales, lectus efficitur mattis porttitor, ex nunc feugiat arcu, et auctor elit est eget neque. Donec aliquet erat posuere blandit vulputate.

Suspendisse sit amet nulla placerat nunc consequat condimentum. Nunc sit amet hendrerit justo, et faucibus eros. Sed est turpis, rhoncus ac sapien maximus, porta gravida nisi. Cras a mauris id lectus blandit blandit vel id purus. Pellentesque aliquam lorem non ex aliquet gravida. Pellentesque egestas lacus massa, nec malesuada lorem consequat a. Cras ultricies, massa sit amet imperdiet pellentesque, libero ipsum venenatis odio, eu convallis neque nulla quis mauris. Mauris ornare luctus diam, non venenatis est luctus ut. Quisque id ultrices arcu, ut facilisis ipsum.

Aenean eget efficitur arcu. Pellentesque congue diam ex, at faucibus nulla aliquam vel. Ut dapibus pellentesque mauris, in accumsan ipsum auctor quis. Nam nibh elit, feugiat nec porta ac, interdum ut mauris. Donec eget augue ligula. Nullam non nunc nunc. Duis aliquet purus vitae consectetur imperdiet.

Integer sollicitudin id eros nec scelerisque. Aliquam hendrerit, tellus eu dapibus molestie, nibh lacus congue sapien, ac mollis elit tellus ac est. Sed bibendum interdum risus sit amet iaculis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam aliquam est id semper mollis. Curabitur vitae ligula feugiat, ullamcorper diam ac, vulputate justo. Suspendisse potenti. Nam eleifend nunc justo, non feugiat libero viverra nec. Mauris erat sem, interdum vel libero vel, venenatis pellentesque nunc. Donec quis sem pellentesque, mollis odio placerat, dictum mi. Ut dapibus interdum felis a porttitor. Maecenas quis odio et leo euismod auctor eget sit amet dolor. Mauris in libero mauris. Duis nec consequat velit. Suspendisse at ligula arcu. Sed congue sed elit a elementum.

Mauris imperdiet tincidunt interdum. Ut elit mi, accumsan eget vestibulum in, convallis ut ipsum. Ut laoreet ligula non massa rhoncus, sit amet gravida lacus bibendum. Nulla facilisi. Vivamus at dui nulla. Nunc pellentesque maximus porta. Suspendisse ut finibus risus, non congue ipsum. Phasellus consectetur aliquam mauris, ut semper lorem pulvinar vel. Maecenas pretium mi pretium tempor sagittis. Morbi laoreet ipsum ut nulla sodales, ac efficitur lectus accumsan. Cras non lorem malesuada, congue sem molestie, vulputate sem. Aenean semper porttitor sapien sit amet tempus. Donec ut elementum diam.

Vivamus in nisi in risus faucibus luctus. Morbi ac blandit purus. Vivamus a placerat arcu, vel condimentum augue. Aliquam tortor nibh, congue vel elit quis, sagittis efficitur metus. Integer a sapien egestas, finibus nunc sit amet, pharetra est. Nulla nec ornare orci. Vestibulum condimentum purus metus, sit amet finibus felis volutpat id. Sed vulputate pellentesque sapien eget condimentum. Suspendisse tempus velit nec lorem accumsan, egestas elementum massa blandit. Aliquam eu nulla et leo rhoncus congue eget at turpis. Cras et leo eget justo auctor volutpat. Morbi eget arcu ut enim sodales tempor vitae id lacus. Vivamus a semper libero.

Vestibulum nec arcu ante. Praesent congue suscipit lectus in euismod. Quisque dui quam, maximus ac ultrices vel, mattis at metus. Nullam ut imperdiet ipsum. Suspendisse velit ipsum, rhoncus quis velit a, molestie efficitur enim. Vestibulum nibh dui, imperdiet eget ante vel, mattis suscipit nibh. Sed id neque ac orci convallis porta at non risus. Quisque lacus est, sollicitudin eget mauris id, pretium luctus ligula. Pellentesque id enim at est euismod pharetra sed non magna. Curabitur elementum vehicula mi, eget accumsan mi accumsan eu. Sed dignissim sagittis purus, id blandit dolor varius at. Ut sagittis ligula libero, non luctus felis malesuada eget. Ut lacinia tellus id feugiat bibendum. Donec non dui tincidunt, dignissim nisl id, pellentesque elit. Pellentesque augue ante, convallis vel enim a, vestibulum ultricies nisi. Phasellus at facilisis massa, vehicula pellentesque risus.

Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla enim diam, tincidunt a justo quis, luctus accumsan turpis. Quisque pharetra vestibulum ante, non tristique tortor malesuada eu. Curabitur rutrum libero ut tortor maximus interdum. Proin molestie neque sed nibh ullamcorper, vel posuere sem venenatis. Aenean pellentesque lacinia dui eu blandit. Aliquam ultrices sollicitudin pretium. Suspendisse id lorem commodo, blandit enim sed, gravida neque. Ut vel vehicula leo. Maecenas malesuada vitae nisi in dictum. Aenean bibendum, augue sit amet blandit placerat, neque diam euismod orci, ut ornare nunc nisl sit amet elit. Mauris sit amet viverra nulla. Aliquam erat volutpat. Curabitur eros est, fermentum a dictum eget, sagittis et libero.

1 // Copyright (C) 2021 by Andy Gozas <andy@gozas.me> 2 // 3 // This file is part of Dusk API. 4 // 5 // Dusk API is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // Dusk API is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with Dusk API. If not, see <https://www.gnu.org/licenses/>. 17 18 //! Module, containing everything needed for version control of 19 //! plugin versions, compiler versions and API versions 20 21 /// Api version parameter, passed from the build script. 22 /// 23 /// For the program that uses the plugin to work correctly it 24 /// has to use the same version of api, which is ensured by embedding 25 /// it as a static variable 26 pub static API_VERSION: &str = env!("CARGO_PKG_VERSION"); 27 28 /// Rust compiler version parameter, passed from the compiler. 29 /// 30 /// If plugin is compiled with a different rust compiler version 31 /// it may be incompatible with the program using it, so before 32 /// proceeding to use the plugin a version check is needed. 33 /// 34 /// For this to work, build script should set this environmental 35 /// variable, which is done for this crate like this 36 /// 37 /// # build.rs 38 /// ``` rust, ignore 39 /// extern crate rustc_version; 40 /// 41 /// fn main() { 42 /// let version = rustc_version::version().unwrap(); 43 /// println!("cargo:rustc-env=RUSTC_VERSION={}", version); 44 /// } 45 /// ``` 46 /// 47 /// # Cargo.toml 48 /// ``` rust, ignore 49 /// [build-dependencies] 50 /// rustc_version = "0.3.0" 51 /// ``` 52 pub static RUSTC_VERSION: &str = env!("RUSTC_VERSION"); 53 54 /// A structure that holds a representation of plugin version 55 /// for easy comparison and storage. 56 /// 57 /// The ordering is as follows 58 /// 59 /// * Major 60 /// * Minor 61 /// * Release 62 /// * Build 63 /// 64 /// e.g in 1.2.3.4, 1 is major, 2 is minor, 3 is release and 4 65 /// is build 66 /// 67 /// # Example 68 /// 69 /// ``` 70 /// let a = dusk_api::Version { major: 1, ..Default::default() }; 71 /// let b = dusk_api::Version { minor: 1, ..Default::default() }; 72 /// let c = dusk_api::Version { major: 0, minor: 2, release: 1, build: 0 }; 73 /// 74 /// assert_eq!(a.cmp(&b), std::cmp::Ordering::Greater); 75 /// assert_eq!(b.cmp(&c), std::cmp::Ordering::Less); 76 /// assert_eq!(a.cmp(&c), std::cmp::Ordering::Greater); 77 /// ``` 78 #[derive(Copy, Clone, Debug, Eq)] 79 pub struct Version { 80 81 /// Major version number 82 pub major: usize, 83 84 /// Minor version number 85 pub minor: usize, 86 87 /// Release version number 88 pub release: usize, 89 90 /// Build version number 91 pub build: usize, 92 } 93 94 impl Ord for Version { 95 fn cmp(self: &Self, other: &Self) -> std::cmp::Ordering { 96 if self.major > other.major { 97 return std::cmp::Ordering::Greater; 98 } 99 if self.major < other.major { 100 return std::cmp::Ordering::Less; 101 } 102 if self.minor > other.minor { 103 return std::cmp::Ordering::Greater; 104 } 105 if self.minor < other.minor { 106 return std::cmp::Ordering::Less; 107 } 108 if self.release > other.release { 109 return std::cmp::Ordering::Greater; 110 } 111 if self.release < other.release { 112 return std::cmp::Ordering::Less; 113 } 114 if self.build > other.build { 115 return std::cmp::Ordering::Greater; 116 } 117 if self.build < other.build { 118 return std::cmp::Ordering::Less; 119 } 120 return std::cmp::Ordering::Equal; 121 } 122 } 123 124 impl PartialOrd for Version { 125 fn partial_cmp( 126 self: &Self, 127 other: &Self, 128 ) -> Option<std::cmp::Ordering> { 129 130 Some(self.cmp(other)) 131 } 132 } 133 134 impl PartialEq for Version { 135 fn eq(self: &Self, other: &Self) -> bool { 136 return self.cmp(other) == std::cmp::Ordering::Equal; 137 } 138 } 139 140 impl Default for Version { 141 fn default () -> Version { 142 Version { 143 major: 0, 144 minor: 0, 145 release: 0, 146 build: 0, 147 } 148 } 149 }