Compare commits
No commits in common. "main" and "all-contributors/add-alexandergill" have entirely different histories.
main
...
all-contri
|
@ -1812,627 +1812,6 @@
|
||||||
"contributions": [
|
"contributions": [
|
||||||
"code"
|
"code"
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "kawaiiPlat",
|
|
||||||
"name": "Jarrod Sanders",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/50600614?v=4",
|
|
||||||
"profile": "https://www.linkedin.com/in/jarrod-sanders/",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "platformer",
|
|
||||||
"name": "Andrew Sen",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/40146328?v=4",
|
|
||||||
"profile": "https://github.com/platformer",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "grzegorz-zur",
|
|
||||||
"name": "Grzegorz Żur",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/5297583?v=4",
|
|
||||||
"profile": "https://grzegorz-zur.com/",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "black-puppydog",
|
|
||||||
"name": "Daan Wynen",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/189241?v=4",
|
|
||||||
"profile": "https://github.com/black-puppydog",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "Anush008",
|
|
||||||
"name": "Anush",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/46051506?v=4",
|
|
||||||
"profile": "https://github.com/Anush008",
|
|
||||||
"contributions": [
|
|
||||||
"doc"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "shgew",
|
|
||||||
"name": "Gleb Shevchenko",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/5584672?v=4",
|
|
||||||
"profile": "https://github.com/shgew",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "mdmundo",
|
|
||||||
"name": "Edmundo Paulino",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/60408300?v=4",
|
|
||||||
"profile": "https://github.com/mdmundo",
|
|
||||||
"contributions": [
|
|
||||||
"infra"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "eroullit",
|
|
||||||
"name": "Emmanuel Roullit",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/301795?v=4",
|
|
||||||
"profile": "https://github.com/eroullit",
|
|
||||||
"contributions": [
|
|
||||||
"infra"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "nidhalmessaoudi",
|
|
||||||
"name": "Nidhal Messaoudi",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/63377412?v=4",
|
|
||||||
"profile": "https://nidhalmessaoudi.herokuapp.com",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "MahdiBM",
|
|
||||||
"name": "Mahdi Bahrami",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/54685446?v=4",
|
|
||||||
"profile": "https://github.com/MahdiBM",
|
|
||||||
"contributions": [
|
|
||||||
"tool"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "Nagidal",
|
|
||||||
"name": "Nagidal",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/7075397?v=4",
|
|
||||||
"profile": "https://github.com/Nagidal",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "adamhb123",
|
|
||||||
"name": "Adam Brewer",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/25161597?v=4",
|
|
||||||
"profile": "https://adabrew.com",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "eugkhp",
|
|
||||||
"name": "Eugene",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/25910599?v=4",
|
|
||||||
"profile": "https://github.com/eugkhp",
|
|
||||||
"contributions": [
|
|
||||||
"tool"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "navicore",
|
|
||||||
"name": "Ed Sweeney",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/110999?v=4",
|
|
||||||
"profile": "https://social.linux.pizza/@navicore",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "javihernant",
|
|
||||||
"name": "javihernant",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/73640929?v=4",
|
|
||||||
"profile": "https://github.com/javihernant",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "VegardMatthey",
|
|
||||||
"name": "Vegard",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/59250656?v=4",
|
|
||||||
"profile": "https://github.com/VegardMatthey",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "ryanwhitehouse",
|
|
||||||
"name": "Ryan Whitehouse",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/13400784?v=4",
|
|
||||||
"profile": "https://github.com/ryanwhitehouse",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "guoard",
|
|
||||||
"name": "Ali Afsharzadeh",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/65511355?v=4",
|
|
||||||
"profile": "https://github.com/guoard",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "keogami",
|
|
||||||
"name": "Keogami",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/41939011?v=4",
|
|
||||||
"profile": "http://keogami.ml",
|
|
||||||
"contributions": [
|
|
||||||
"doc"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "ahresse",
|
|
||||||
"name": "Alexandre Esse",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/28402488?v=4",
|
|
||||||
"profile": "https://github.com/ahresse",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "sagarvora",
|
|
||||||
"name": "Sagar Vora",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/16315650?v=4",
|
|
||||||
"profile": "https://resilient.tech",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "poneciak57",
|
|
||||||
"name": "Kacper Poneta",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/94321164?v=4",
|
|
||||||
"profile": "https://github.com/poneciak57",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "ktheory",
|
|
||||||
"name": "Aaron Suggs",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/975?v=4",
|
|
||||||
"profile": "https://ktheory.com/",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "alexwh",
|
|
||||||
"name": "Alex",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/1723612?v=4",
|
|
||||||
"profile": "https://github.com/alexwh",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "stornquist",
|
|
||||||
"name": "Sebastian Törnquist",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/42915664?v=4",
|
|
||||||
"profile": "https://github.com/stornquist",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "smlavine",
|
|
||||||
"name": "Sebastian LaVine",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/33563640?v=4",
|
|
||||||
"profile": "http://smlavine.com",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "akgerber",
|
|
||||||
"name": "Alan Gerber",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/201313?v=4",
|
|
||||||
"profile": "http://www.alangerber.us",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "esotuvaka",
|
|
||||||
"name": "Eric",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/104941850?v=4",
|
|
||||||
"profile": "http://esotuvaka.github.io",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "az0977776",
|
|
||||||
"name": "Aaron Wang",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/9172038?v=4",
|
|
||||||
"profile": "https://github.com/az0977776",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "nmay231",
|
|
||||||
"name": "Noah",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/35386821?v=4",
|
|
||||||
"profile": "https://github.com/nmay231",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "rb5014",
|
|
||||||
"name": "rb5014",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/105397317?v=4",
|
|
||||||
"profile": "https://github.com/rb5014",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "deedy5",
|
|
||||||
"name": "deedy5",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/65482418?v=4",
|
|
||||||
"profile": "https://github.com/deedy5",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "lionel-rowe",
|
|
||||||
"name": "lionel-rowe",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/26078826?v=4",
|
|
||||||
"profile": "https://github.com/lionel-rowe",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "Ben2917",
|
|
||||||
"name": "Ben",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/10279994?v=4",
|
|
||||||
"profile": "https://github.com/Ben2917",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "b1ue64",
|
|
||||||
"name": "b1ue64",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/77976308?v=4",
|
|
||||||
"profile": "https://github.com/b1ue64",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "lazywalker",
|
|
||||||
"name": "lazywalker",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/53956?v=4",
|
|
||||||
"profile": "https://github.com/lazywalker",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "proofconstruction",
|
|
||||||
"name": "proofconstruction",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/74747193?v=4",
|
|
||||||
"profile": "https://github.com/proofconstruction",
|
|
||||||
"contributions": [
|
|
||||||
"infra"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "IVIURRAY",
|
|
||||||
"name": "IVIURRAY",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/16007179?v=4",
|
|
||||||
"profile": "https://www.youtube.com/channel/UCQCjA6qUutAtWqkCA4Z36CQ",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "b-apperlo",
|
|
||||||
"name": "Bert Apperlo",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/91734527?v=4",
|
|
||||||
"profile": "https://github.com/b-apperlo",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "FWDekker",
|
|
||||||
"name": "Florine W. Dekker",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/13442533?v=4",
|
|
||||||
"profile": "https://fwdekker.com/",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "luhem7",
|
|
||||||
"name": "Mehul Gangavelli",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/4008215?v=4",
|
|
||||||
"profile": "https://github.com/luhem7",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "Frosthage",
|
|
||||||
"name": "Mikael Frosthage",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/14823314?v=4",
|
|
||||||
"profile": "https://github.com/Frosthage",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "robertefry",
|
|
||||||
"name": "Robert Fry",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/43712054?v=4",
|
|
||||||
"profile": "https://robertfry.xyz",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "tajo48",
|
|
||||||
"name": "tajo48",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/55502906?v=4",
|
|
||||||
"profile": "https://github.com/tajo48",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "novanish",
|
|
||||||
"name": "Anish",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/98446102?v=4",
|
|
||||||
"profile": "https://anishchhetri.com.np",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "vnprc",
|
|
||||||
"name": "vnprc",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/9425366?v=4",
|
|
||||||
"profile": "https://github.com/vnprc",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "jrcarl624",
|
|
||||||
"name": "Joshua Carlson",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/61999256?v=4",
|
|
||||||
"profile": "http://androecia.net",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "johnDeSilencio",
|
|
||||||
"name": "Nicholas R. Smith",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/20136554?v=4",
|
|
||||||
"profile": "https://johndesilencio.me",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "alexfertel",
|
|
||||||
"name": "Alexander González",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/22298999?v=4",
|
|
||||||
"profile": "https://alexfertel.me",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "softarn",
|
|
||||||
"name": "Marcus Höjvall",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/517619?v=4",
|
|
||||||
"profile": "https://github.com/softarn",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "barlevalon",
|
|
||||||
"name": "Alon Hearter",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/3397911?v=4",
|
|
||||||
"profile": "https://github.com/barlevalon",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "shirts",
|
|
||||||
"name": "shirts",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/4952151?v=4",
|
|
||||||
"profile": "https://github.com/shirts",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "eLVas",
|
|
||||||
"name": "Ivan Vasiunyk",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/6797156?v=4",
|
|
||||||
"profile": "https://github.com/eLVas",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "mo8it",
|
|
||||||
"name": "Mo",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/76752051?v=4",
|
|
||||||
"profile": "https://mo8it.com",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "x10an14",
|
|
||||||
"name": "x10an14",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/710608?v=4",
|
|
||||||
"profile": "https://github.com/x10an14",
|
|
||||||
"contributions": [
|
|
||||||
"infra"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "gabay",
|
|
||||||
"name": "Roi Gabay",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/5773610?v=4",
|
|
||||||
"profile": "https://github.com/gabay",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "mkovaxx",
|
|
||||||
"name": "Máté Kovács",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/481354?v=4",
|
|
||||||
"profile": "https://github.com/mkovaxx",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "szabgab",
|
|
||||||
"name": "Gábor Szabó",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/48833?v=4",
|
|
||||||
"profile": "https://szabgab.com/",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "yamila-moreno",
|
|
||||||
"name": "Yamila Moreno",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/3340793?v=4",
|
|
||||||
"profile": "https://moduslaborandi.net",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "willhack",
|
|
||||||
"name": "Will Hack",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/18036720?v=4",
|
|
||||||
"profile": "https://github.com/willhack",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "bean5",
|
|
||||||
"name": "Michael",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/2052646?v=4",
|
|
||||||
"profile": "http://cancompute.tech",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "pksadiq",
|
|
||||||
"name": "Mohammed Sadiq",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/1289514?v=4",
|
|
||||||
"profile": "https://www.sadiqpk.org",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "Jak-Ch-ll",
|
|
||||||
"name": "Jakob",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/56225668?v=4",
|
|
||||||
"profile": "https://github.com/Jak-Ch-ll",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "ob",
|
|
||||||
"name": "Oscar Bonilla",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/4950?v=4",
|
|
||||||
"profile": "http://oscarbonilla.com",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "husjon",
|
|
||||||
"name": "Jon Erling Hustadnes",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/554229?v=4",
|
|
||||||
"profile": "https://github.com/husjon",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "CobaltCause",
|
|
||||||
"name": "Charles Hall",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/7003738?v=4",
|
|
||||||
"profile": "https://github.com/CobaltCause",
|
|
||||||
"contributions": [
|
|
||||||
"infra"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "krmpotic",
|
|
||||||
"name": "Luka Krmpotić",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/10350645?v=4",
|
|
||||||
"profile": "https://github.com/krmpotic",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "jurglic",
|
|
||||||
"name": "Jurglic",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/112600?v=4",
|
|
||||||
"profile": "https://github.com/jurglic",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "OfirLauber",
|
|
||||||
"name": "Ofir Lauber",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/5631030?v=4",
|
|
||||||
"profile": "https://github.com/OfirLauber",
|
|
||||||
"contributions": [
|
|
||||||
"content"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"contributorsPerLine": 8,
|
"contributorsPerLine": 8,
|
||||||
|
@ -2441,6 +1820,5 @@
|
||||||
"repoType": "github",
|
"repoType": "github",
|
||||||
"repoHost": "https://github.com",
|
"repoHost": "https://github.com",
|
||||||
"skipCi": true,
|
"skipCi": true,
|
||||||
"commitConvention": "angular",
|
"commitConvention": "angular"
|
||||||
"commitType": "docs"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
"image": "mcr.microsoft.com/devcontainers/universal:2-linux",
|
|
||||||
"waitFor": "onCreateCommand",
|
|
||||||
"onCreateCommand": ".devcontainer/setup.sh",
|
|
||||||
"updateContentCommand": "cargo build",
|
|
||||||
"postCreateCommand": "",
|
|
||||||
"postAttachCommand": {
|
|
||||||
"server": "rustlings watch"
|
|
||||||
},
|
|
||||||
"customizations": {
|
|
||||||
"vscode": {
|
|
||||||
"extensions": [
|
|
||||||
"rust-lang.rust-analyzer"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
curl https://sh.rustup.rs -sSf | sh -s -- -y
|
|
||||||
|
|
||||||
# Update current shell environment variables after install to find rustup
|
|
||||||
. "$HOME/.cargo/env"
|
|
||||||
rustup install stable
|
|
||||||
bash install.sh
|
|
4
.envrc
4
.envrc
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Automatically Load nix devShell w/dotenv
|
|
||||||
use flake
|
|
|
@ -10,28 +10,11 @@ env:
|
||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
fmt:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
- name: Build
|
||||||
with:
|
run: cargo build --verbose
|
||||||
components: rustfmt
|
- name: Run tests
|
||||||
- uses: DavidAnson/markdownlint-cli2-action@v9
|
run: cargo test --verbose
|
||||||
with:
|
|
||||||
globs: "exercises/**/*.md"
|
|
||||||
- name: Run cargo fmt
|
|
||||||
run: |
|
|
||||||
cargo fmt --all -- --check
|
|
||||||
test:
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- uses: swatinem/rust-cache@v2
|
|
||||||
- name: Run cargo test
|
|
||||||
run: |
|
|
||||||
cargo test
|
|
||||||
|
|
|
@ -1,88 +0,0 @@
|
||||||
# Workflow to build your docs with oranda (and mdbook)
|
|
||||||
# and deploy them to Github Pages
|
|
||||||
name: Web
|
|
||||||
|
|
||||||
# We're going to push to the gh-pages branch, so we need that permission
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
# What situations do we want to build docs in?
|
|
||||||
# All of these work independently and can be removed / commented out
|
|
||||||
# if you don't want oranda/mdbook running in that situation
|
|
||||||
on:
|
|
||||||
# Check that a PR didn't break docs!
|
|
||||||
#
|
|
||||||
# Note that the "Deploy to Github Pages" step won't run in this mode,
|
|
||||||
# so this won't have any side-effects. But it will tell you if a PR
|
|
||||||
# completely broke oranda/mdbook. Sadly we don't provide previews (yet)!
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
# Whenever something gets pushed to main, update the docs!
|
|
||||||
# This is great for getting docs changes live without cutting a full release.
|
|
||||||
#
|
|
||||||
# Note that if you're using cargo-dist, this will "race" the Release workflow
|
|
||||||
# that actually builds the Github Release that oranda tries to read (and
|
|
||||||
# this will almost certainly complete first). As a result you will publish
|
|
||||||
# docs for the latest commit but the oranda landing page won't know about
|
|
||||||
# the latest release. The workflow_run trigger below will properly wait for
|
|
||||||
# cargo-dist, and so this half-published state will only last for ~10 minutes.
|
|
||||||
#
|
|
||||||
# If you only want docs to update with releases, disable this, or change it to
|
|
||||||
# a "release" branch. You can, of course, also manually trigger a workflow run
|
|
||||||
# when you want the docs to update.
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
# Whenever a workflow called "Release" completes, update the docs!
|
|
||||||
#
|
|
||||||
# If you're using cargo-dist, this is recommended, as it will ensure that
|
|
||||||
# oranda always sees the latest release right when it's available. Note
|
|
||||||
# however that Github's UI is wonky when you use workflow_run, and won't
|
|
||||||
# show this workflow as part of any commit. You have to go to the "actions"
|
|
||||||
# tab for your repo to see this one running (the gh-pages deploy will also
|
|
||||||
# only show up there).
|
|
||||||
workflow_run:
|
|
||||||
workflows: [ "Release" ]
|
|
||||||
types:
|
|
||||||
- completed
|
|
||||||
|
|
||||||
# Alright, let's do it!
|
|
||||||
jobs:
|
|
||||||
web:
|
|
||||||
name: Build and deploy site and docs
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
# Setup
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- uses: swatinem/rust-cache@v2
|
|
||||||
|
|
||||||
# If you use any mdbook plugins, here's the place to install them!
|
|
||||||
|
|
||||||
# Install and run oranda (and mdbook)
|
|
||||||
# This will write all output to ./public/ (including copying mdbook's output to there)
|
|
||||||
- name: Install and run oranda
|
|
||||||
run: |
|
|
||||||
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/oranda/releases/download/v0.3.1/oranda-installer.sh | sh
|
|
||||||
oranda build
|
|
||||||
|
|
||||||
# Deploy to our gh-pages branch (creating it if it doesn't exist)
|
|
||||||
# the "public" dir that oranda made above will become the root dir
|
|
||||||
# of this branch.
|
|
||||||
#
|
|
||||||
# Note that once the gh-pages branch exists, you must
|
|
||||||
# go into repo's settings > pages and set "deploy from branch: gh-pages"
|
|
||||||
# the other defaults work fine.
|
|
||||||
- name: Deploy to Github Pages
|
|
||||||
uses: JamesIves/github-pages-deploy-action@v4.4.1
|
|
||||||
# ONLY if we're on main (so no PRs or feature branches allowed!)
|
|
||||||
if: ${{ github.ref == 'refs/heads/main' }}
|
|
||||||
with:
|
|
||||||
branch: gh-pages
|
|
||||||
# Gotta tell the action where to find oranda's output
|
|
||||||
folder: public
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
single-commit: true
|
|
|
@ -11,8 +11,3 @@ rust-project.json
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
*.iml
|
*.iml
|
||||||
*.o
|
*.o
|
||||||
public/
|
|
||||||
.direnv/
|
|
||||||
|
|
||||||
# Local Netlify folder
|
|
||||||
.netlify
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
# MD013/line-length Line length, Expected: 80
|
|
||||||
MD013: false
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
language = "rust"
|
||||||
|
run = "[ -x ~/.cargo/bin/rustlings ] && ~/.cargo/bin/rustlings watch || ./install.sh"
|
87
AUTHORS.md
87
AUTHORS.md
|
@ -257,93 +257,6 @@ authors.
|
||||||
<td align="center" valign="top" width="12.5%"><a href="http://github.com/zeromicro/go-zero"><img src="https://avatars.githubusercontent.com/u/1918356?v=4?s=100" width="100px;" alt="Kevin Wan"/><br /><sub><b>Kevin Wan</b></sub></a><br /><a href="#content-kevwan" title="Content">🖋</a></td>
|
<td align="center" valign="top" width="12.5%"><a href="http://github.com/zeromicro/go-zero"><img src="https://avatars.githubusercontent.com/u/1918356?v=4?s=100" width="100px;" alt="Kevin Wan"/><br /><sub><b>Kevin Wan</b></sub></a><br /><a href="#content-kevwan" title="Content">🖋</a></td>
|
||||||
<td align="center" valign="top" width="12.5%"><a href="http://kurowasaruby.cn"><img src="https://avatars.githubusercontent.com/u/43495006?v=4?s=100" width="100px;" alt="Ruby"/><br /><sub><b>Ruby</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=wjwrh" title="Code">💻</a></td>
|
<td align="center" valign="top" width="12.5%"><a href="http://kurowasaruby.cn"><img src="https://avatars.githubusercontent.com/u/43495006?v=4?s=100" width="100px;" alt="Ruby"/><br /><sub><b>Ruby</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=wjwrh" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/alexandergill"><img src="https://avatars.githubusercontent.com/u/7033716?v=4?s=100" width="100px;" alt="Alexander Gill"/><br /><sub><b>Alexander Gill</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=alexandergill" title="Code">💻</a></td>
|
<td align="center" valign="top" width="12.5%"><a href="https://github.com/alexandergill"><img src="https://avatars.githubusercontent.com/u/7033716?v=4?s=100" width="100px;" alt="Alexander Gill"/><br /><sub><b>Alexander Gill</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=alexandergill" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/jarrod-sanders/"><img src="https://avatars.githubusercontent.com/u/50600614?v=4?s=100" width="100px;" alt="Jarrod Sanders"/><br /><sub><b>Jarrod Sanders</b></sub></a><br /><a href="#content-kawaiiPlat" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/platformer"><img src="https://avatars.githubusercontent.com/u/40146328?v=4?s=100" width="100px;" alt="Andrew Sen"/><br /><sub><b>Andrew Sen</b></sub></a><br /><a href="#content-platformer" title="Content">🖋</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://grzegorz-zur.com/"><img src="https://avatars.githubusercontent.com/u/5297583?v=4?s=100" width="100px;" alt="Grzegorz Żur"/><br /><sub><b>Grzegorz Żur</b></sub></a><br /><a href="#content-grzegorz-zur" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/black-puppydog"><img src="https://avatars.githubusercontent.com/u/189241?v=4?s=100" width="100px;" alt="Daan Wynen"/><br /><sub><b>Daan Wynen</b></sub></a><br /><a href="#content-black-puppydog" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Anush008"><img src="https://avatars.githubusercontent.com/u/46051506?v=4?s=100" width="100px;" alt="Anush"/><br /><sub><b>Anush</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=Anush008" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/shgew"><img src="https://avatars.githubusercontent.com/u/5584672?v=4?s=100" width="100px;" alt="Gleb Shevchenko"/><br /><sub><b>Gleb Shevchenko</b></sub></a><br /><a href="#content-shgew" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/mdmundo"><img src="https://avatars.githubusercontent.com/u/60408300?v=4?s=100" width="100px;" alt="Edmundo Paulino"/><br /><sub><b>Edmundo Paulino</b></sub></a><br /><a href="#infra-mdmundo" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/eroullit"><img src="https://avatars.githubusercontent.com/u/301795?v=4?s=100" width="100px;" alt="Emmanuel Roullit"/><br /><sub><b>Emmanuel Roullit</b></sub></a><br /><a href="#infra-eroullit" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://nidhalmessaoudi.herokuapp.com"><img src="https://avatars.githubusercontent.com/u/63377412?v=4?s=100" width="100px;" alt="Nidhal Messaoudi"/><br /><sub><b>Nidhal Messaoudi</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=nidhalmessaoudi" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/MahdiBM"><img src="https://avatars.githubusercontent.com/u/54685446?v=4?s=100" width="100px;" alt="Mahdi Bahrami"/><br /><sub><b>Mahdi Bahrami</b></sub></a><br /><a href="#tool-MahdiBM" title="Tools">🔧</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Nagidal"><img src="https://avatars.githubusercontent.com/u/7075397?v=4?s=100" width="100px;" alt="Nagidal"/><br /><sub><b>Nagidal</b></sub></a><br /><a href="#content-Nagidal" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://adabrew.com"><img src="https://avatars.githubusercontent.com/u/25161597?v=4?s=100" width="100px;" alt="Adam Brewer"/><br /><sub><b>Adam Brewer</b></sub></a><br /><a href="#content-adamhb123" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/eugkhp"><img src="https://avatars.githubusercontent.com/u/25910599?v=4?s=100" width="100px;" alt="Eugene"/><br /><sub><b>Eugene</b></sub></a><br /><a href="#tool-eugkhp" title="Tools">🔧</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://social.linux.pizza/@navicore"><img src="https://avatars.githubusercontent.com/u/110999?v=4?s=100" width="100px;" alt="Ed Sweeney"/><br /><sub><b>Ed Sweeney</b></sub></a><br /><a href="#content-navicore" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/javihernant"><img src="https://avatars.githubusercontent.com/u/73640929?v=4?s=100" width="100px;" alt="javihernant"/><br /><sub><b>javihernant</b></sub></a><br /><a href="#content-javihernant" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/VegardMatthey"><img src="https://avatars.githubusercontent.com/u/59250656?v=4?s=100" width="100px;" alt="Vegard"/><br /><sub><b>Vegard</b></sub></a><br /><a href="#content-VegardMatthey" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ryanwhitehouse"><img src="https://avatars.githubusercontent.com/u/13400784?v=4?s=100" width="100px;" alt="Ryan Whitehouse"/><br /><sub><b>Ryan Whitehouse</b></sub></a><br /><a href="#content-ryanwhitehouse" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/guoard"><img src="https://avatars.githubusercontent.com/u/65511355?v=4?s=100" width="100px;" alt="Ali Afsharzadeh"/><br /><sub><b>Ali Afsharzadeh</b></sub></a><br /><a href="#content-guoard" title="Content">🖋</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="http://keogami.ml"><img src="https://avatars.githubusercontent.com/u/41939011?v=4?s=100" width="100px;" alt="Keogami"/><br /><sub><b>Keogami</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=keogami" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ahresse"><img src="https://avatars.githubusercontent.com/u/28402488?v=4?s=100" width="100px;" alt="Alexandre Esse"/><br /><sub><b>Alexandre Esse</b></sub></a><br /><a href="#content-ahresse" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://resilient.tech"><img src="https://avatars.githubusercontent.com/u/16315650?v=4?s=100" width="100px;" alt="Sagar Vora"/><br /><sub><b>Sagar Vora</b></sub></a><br /><a href="#content-sagarvora" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/poneciak57"><img src="https://avatars.githubusercontent.com/u/94321164?v=4?s=100" width="100px;" alt="Kacper Poneta"/><br /><sub><b>Kacper Poneta</b></sub></a><br /><a href="#content-poneciak57" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://ktheory.com/"><img src="https://avatars.githubusercontent.com/u/975?v=4?s=100" width="100px;" alt="Aaron Suggs"/><br /><sub><b>Aaron Suggs</b></sub></a><br /><a href="#content-ktheory" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/alexwh"><img src="https://avatars.githubusercontent.com/u/1723612?v=4?s=100" width="100px;" alt="Alex"/><br /><sub><b>Alex</b></sub></a><br /><a href="#content-alexwh" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/stornquist"><img src="https://avatars.githubusercontent.com/u/42915664?v=4?s=100" width="100px;" alt="Sebastian Törnquist"/><br /><sub><b>Sebastian Törnquist</b></sub></a><br /><a href="#content-stornquist" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="http://smlavine.com"><img src="https://avatars.githubusercontent.com/u/33563640?v=4?s=100" width="100px;" alt="Sebastian LaVine"/><br /><sub><b>Sebastian LaVine</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=smlavine" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="http://www.alangerber.us"><img src="https://avatars.githubusercontent.com/u/201313?v=4?s=100" width="100px;" alt="Alan Gerber"/><br /><sub><b>Alan Gerber</b></sub></a><br /><a href="#content-akgerber" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="http://esotuvaka.github.io"><img src="https://avatars.githubusercontent.com/u/104941850?v=4?s=100" width="100px;" alt="Eric"/><br /><sub><b>Eric</b></sub></a><br /><a href="#content-esotuvaka" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/az0977776"><img src="https://avatars.githubusercontent.com/u/9172038?v=4?s=100" width="100px;" alt="Aaron Wang"/><br /><sub><b>Aaron Wang</b></sub></a><br /><a href="#content-az0977776" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/nmay231"><img src="https://avatars.githubusercontent.com/u/35386821?v=4?s=100" width="100px;" alt="Noah"/><br /><sub><b>Noah</b></sub></a><br /><a href="#content-nmay231" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/rb5014"><img src="https://avatars.githubusercontent.com/u/105397317?v=4?s=100" width="100px;" alt="rb5014"/><br /><sub><b>rb5014</b></sub></a><br /><a href="#content-rb5014" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/deedy5"><img src="https://avatars.githubusercontent.com/u/65482418?v=4?s=100" width="100px;" alt="deedy5"/><br /><sub><b>deedy5</b></sub></a><br /><a href="#content-deedy5" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/lionel-rowe"><img src="https://avatars.githubusercontent.com/u/26078826?v=4?s=100" width="100px;" alt="lionel-rowe"/><br /><sub><b>lionel-rowe</b></sub></a><br /><a href="#content-lionel-rowe" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Ben2917"><img src="https://avatars.githubusercontent.com/u/10279994?v=4?s=100" width="100px;" alt="Ben"/><br /><sub><b>Ben</b></sub></a><br /><a href="#content-Ben2917" title="Content">🖋</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/b1ue64"><img src="https://avatars.githubusercontent.com/u/77976308?v=4?s=100" width="100px;" alt="b1ue64"/><br /><sub><b>b1ue64</b></sub></a><br /><a href="#content-b1ue64" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/lazywalker"><img src="https://avatars.githubusercontent.com/u/53956?v=4?s=100" width="100px;" alt="lazywalker"/><br /><sub><b>lazywalker</b></sub></a><br /><a href="#content-lazywalker" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/proofconstruction"><img src="https://avatars.githubusercontent.com/u/74747193?v=4?s=100" width="100px;" alt="proofconstruction"/><br /><sub><b>proofconstruction</b></sub></a><br /><a href="#infra-proofconstruction" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://www.youtube.com/channel/UCQCjA6qUutAtWqkCA4Z36CQ"><img src="https://avatars.githubusercontent.com/u/16007179?v=4?s=100" width="100px;" alt="IVIURRAY"/><br /><sub><b>IVIURRAY</b></sub></a><br /><a href="#content-IVIURRAY" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/b-apperlo"><img src="https://avatars.githubusercontent.com/u/91734527?v=4?s=100" width="100px;" alt="Bert Apperlo"/><br /><sub><b>Bert Apperlo</b></sub></a><br /><a href="#content-b-apperlo" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://fwdekker.com/"><img src="https://avatars.githubusercontent.com/u/13442533?v=4?s=100" width="100px;" alt="Florine W. Dekker"/><br /><sub><b>Florine W. Dekker</b></sub></a><br /><a href="#content-FWDekker" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/luhem7"><img src="https://avatars.githubusercontent.com/u/4008215?v=4?s=100" width="100px;" alt="Mehul Gangavelli"/><br /><sub><b>Mehul Gangavelli</b></sub></a><br /><a href="#content-luhem7" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Frosthage"><img src="https://avatars.githubusercontent.com/u/14823314?v=4?s=100" width="100px;" alt="Mikael Frosthage"/><br /><sub><b>Mikael Frosthage</b></sub></a><br /><a href="#content-Frosthage" title="Content">🖋</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://robertfry.xyz"><img src="https://avatars.githubusercontent.com/u/43712054?v=4?s=100" width="100px;" alt="Robert Fry"/><br /><sub><b>Robert Fry</b></sub></a><br /><a href="#content-robertefry" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tajo48"><img src="https://avatars.githubusercontent.com/u/55502906?v=4?s=100" width="100px;" alt="tajo48"/><br /><sub><b>tajo48</b></sub></a><br /><a href="#content-tajo48" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://anishchhetri.com.np"><img src="https://avatars.githubusercontent.com/u/98446102?v=4?s=100" width="100px;" alt="Anish"/><br /><sub><b>Anish</b></sub></a><br /><a href="#content-novanish" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/vnprc"><img src="https://avatars.githubusercontent.com/u/9425366?v=4?s=100" width="100px;" alt="vnprc"/><br /><sub><b>vnprc</b></sub></a><br /><a href="#content-vnprc" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="http://androecia.net"><img src="https://avatars.githubusercontent.com/u/61999256?v=4?s=100" width="100px;" alt="Joshua Carlson"/><br /><sub><b>Joshua Carlson</b></sub></a><br /><a href="#content-jrcarl624" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://johndesilencio.me"><img src="https://avatars.githubusercontent.com/u/20136554?v=4?s=100" width="100px;" alt="Nicholas R. Smith"/><br /><sub><b>Nicholas R. Smith</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=johnDeSilencio" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://alexfertel.me"><img src="https://avatars.githubusercontent.com/u/22298999?v=4?s=100" width="100px;" alt="Alexander González"/><br /><sub><b>Alexander González</b></sub></a><br /><a href="#content-alexfertel" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/softarn"><img src="https://avatars.githubusercontent.com/u/517619?v=4?s=100" width="100px;" alt="Marcus Höjvall"/><br /><sub><b>Marcus Höjvall</b></sub></a><br /><a href="#content-softarn" title="Content">🖋</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/barlevalon"><img src="https://avatars.githubusercontent.com/u/3397911?v=4?s=100" width="100px;" alt="Alon Hearter"/><br /><sub><b>Alon Hearter</b></sub></a><br /><a href="#content-barlevalon" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/shirts"><img src="https://avatars.githubusercontent.com/u/4952151?v=4?s=100" width="100px;" alt="shirts"/><br /><sub><b>shirts</b></sub></a><br /><a href="#content-shirts" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/eLVas"><img src="https://avatars.githubusercontent.com/u/6797156?v=4?s=100" width="100px;" alt="Ivan Vasiunyk"/><br /><sub><b>Ivan Vasiunyk</b></sub></a><br /><a href="#content-eLVas" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://mo8it.com"><img src="https://avatars.githubusercontent.com/u/76752051?v=4?s=100" width="100px;" alt="Mo"/><br /><sub><b>Mo</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=mo8it" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/x10an14"><img src="https://avatars.githubusercontent.com/u/710608?v=4?s=100" width="100px;" alt="x10an14"/><br /><sub><b>x10an14</b></sub></a><br /><a href="#infra-x10an14" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/gabay"><img src="https://avatars.githubusercontent.com/u/5773610?v=4?s=100" width="100px;" alt="Roi Gabay"/><br /><sub><b>Roi Gabay</b></sub></a><br /><a href="#content-gabay" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/mkovaxx"><img src="https://avatars.githubusercontent.com/u/481354?v=4?s=100" width="100px;" alt="Máté Kovács"/><br /><sub><b>Máté Kovács</b></sub></a><br /><a href="#content-mkovaxx" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://szabgab.com/"><img src="https://avatars.githubusercontent.com/u/48833?v=4?s=100" width="100px;" alt="Gábor Szabó"/><br /><sub><b>Gábor Szabó</b></sub></a><br /><a href="#content-szabgab" title="Content">🖋</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://moduslaborandi.net"><img src="https://avatars.githubusercontent.com/u/3340793?v=4?s=100" width="100px;" alt="Yamila Moreno"/><br /><sub><b>Yamila Moreno</b></sub></a><br /><a href="#content-yamila-moreno" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/willhack"><img src="https://avatars.githubusercontent.com/u/18036720?v=4?s=100" width="100px;" alt="Will Hack"/><br /><sub><b>Will Hack</b></sub></a><br /><a href="#content-willhack" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="http://cancompute.tech"><img src="https://avatars.githubusercontent.com/u/2052646?v=4?s=100" width="100px;" alt="Michael"/><br /><sub><b>Michael</b></sub></a><br /><a href="#content-bean5" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://www.sadiqpk.org"><img src="https://avatars.githubusercontent.com/u/1289514?v=4?s=100" width="100px;" alt="Mohammed Sadiq"/><br /><sub><b>Mohammed Sadiq</b></sub></a><br /><a href="#content-pksadiq" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Jak-Ch-ll"><img src="https://avatars.githubusercontent.com/u/56225668?v=4?s=100" width="100px;" alt="Jakob"/><br /><sub><b>Jakob</b></sub></a><br /><a href="#content-Jak-Ch-ll" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="http://oscarbonilla.com"><img src="https://avatars.githubusercontent.com/u/4950?v=4?s=100" width="100px;" alt="Oscar Bonilla"/><br /><sub><b>Oscar Bonilla</b></sub></a><br /><a href="#content-ob" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/husjon"><img src="https://avatars.githubusercontent.com/u/554229?v=4?s=100" width="100px;" alt="Jon Erling Hustadnes"/><br /><sub><b>Jon Erling Hustadnes</b></sub></a><br /><a href="#content-husjon" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/CobaltCause"><img src="https://avatars.githubusercontent.com/u/7003738?v=4?s=100" width="100px;" alt="Charles Hall"/><br /><sub><b>Charles Hall</b></sub></a><br /><a href="#infra-CobaltCause" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/krmpotic"><img src="https://avatars.githubusercontent.com/u/10350645?v=4?s=100" width="100px;" alt="Luka Krmpotić"/><br /><sub><b>Luka Krmpotić</b></sub></a><br /><a href="#content-krmpotic" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jurglic"><img src="https://avatars.githubusercontent.com/u/112600?v=4?s=100" width="100px;" alt="Jurglic"/><br /><sub><b>Jurglic</b></sub></a><br /><a href="#content-jurglic" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/OfirLauber"><img src="https://avatars.githubusercontent.com/u/5631030?v=4?s=100" width="100px;" alt="Ofir Lauber"/><br /><sub><b>Ofir Lauber</b></sub></a><br /><a href="#content-OfirLauber" title="Content">🖋</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
677
CHANGELOG.md
677
CHANGELOG.md
|
@ -1,149 +1,4 @@
|
||||||
<a name="5.6.1"></a>
|
|
||||||
## 5.6.1 (2023-09-18)
|
|
||||||
|
|
||||||
#### Changed
|
|
||||||
|
|
||||||
- Converted all exercises with assertions to test mode.
|
|
||||||
|
|
||||||
#### Fixed
|
|
||||||
|
|
||||||
- `cow1`: Reverted regression introduced by calling `to_mut` where it
|
|
||||||
shouldn't have been called, and clarified comment.
|
|
||||||
- `primitive_types3`: Require at least an array of 100 elements.
|
|
||||||
- Removed hint comments when no hint exists for the exercise.
|
|
||||||
- `as_ref_mut`: Fixed a typo in a test function name.
|
|
||||||
- `enums3`: Fixed formatting with `rustfmt`.
|
|
||||||
|
|
||||||
<a name="5.6.0"></a>
|
|
||||||
## 5.6.0 (2023-09-04)
|
|
||||||
|
|
||||||
#### Added
|
|
||||||
|
|
||||||
- New exercise: `if3`, teaching the user about `if let` statements.
|
|
||||||
- `hashmaps2`: Added an extra test function to check if the amount of fruits is higher than zero.
|
|
||||||
- `enums3`: Added a test for `Message`.
|
|
||||||
- `if1`: Added a test case to check equal values.
|
|
||||||
- `if3`: Added a note specifying that there are no test changes needed.
|
|
||||||
|
|
||||||
#### Changed
|
|
||||||
|
|
||||||
- Swapped the order of threads and smart pointer exercises.
|
|
||||||
- Rewrote the CLI to use `clap` - it's matured much since we switched to `argh` :)
|
|
||||||
- `structs3`: Switched from i32 to u32.
|
|
||||||
- `move_semantics`: Switched 1-4 to tests, and rewrote them to be way simpler, while still teaching about the same
|
|
||||||
concepts.
|
|
||||||
|
|
||||||
#### Fixed
|
|
||||||
|
|
||||||
- `iterators5`:
|
|
||||||
- Removed an outdated part of the hint.
|
|
||||||
- Renamed variables to use snake_case.
|
|
||||||
- `vecs2`: Updated the hint to reference the renamed loop variable.
|
|
||||||
- `enums3`: Changed message string in test so that it gets properly tested.
|
|
||||||
- `strings2`: Corrected line number in hint, then removed it (this both happened as part of this release cycle).
|
|
||||||
- `primitive_types4`: Updated hint to the correct ending index.
|
|
||||||
- `quiz1`: Removed duplicated sentence from exercise comments.
|
|
||||||
- `errors4`: Improved comment.
|
|
||||||
- `from_into`: Fixed test values.
|
|
||||||
- `cow1`: Added `.to_mut()` to distinguish from the previous test case.
|
|
||||||
- `threads2`: Updated hint text to reference the correct book heading.
|
|
||||||
|
|
||||||
#### Housekeeping
|
|
||||||
|
|
||||||
- Cleaned up the explanation paragraphs at the start of each exercise.
|
|
||||||
- Lots of Nix housekeeping that I don't feel qualified to write about!
|
|
||||||
- Improved CI workflows, we're now testing on multiple platforms at once.
|
|
||||||
|
|
||||||
<a name="5.5.1"></a>
|
|
||||||
## 5.5.1 (2023-05-17)
|
|
||||||
|
|
||||||
#### Fixed
|
|
||||||
|
|
||||||
- Reverted `rust-project.json` path generation due to an upstream `rust-analyzer` fix.
|
|
||||||
|
|
||||||
<a name="5.5.0"></a>
|
|
||||||
## 5.5.0 (2023-05-17)
|
|
||||||
|
|
||||||
#### Added
|
|
||||||
|
|
||||||
- `strings2`: Added a reference to the book chapter for reference conversion
|
|
||||||
- `lifetimes`: Added a link to the lifetimekata project
|
|
||||||
- Added a new `tests4` exercises, which teaches about testing for panics
|
|
||||||
- Added a `!` prefix command to watch mode that runs an external command
|
|
||||||
- Added a `--success-hints` option to watch mode that shows hints on exercise success
|
|
||||||
|
|
||||||
#### Changed
|
|
||||||
|
|
||||||
- `vecs2`: Renamed iterator variable bindings for clarify
|
|
||||||
- `lifetimes`: Changed order of book references
|
|
||||||
- `hashmaps2`: Clarified instructions in the todo block
|
|
||||||
- Moved lifetime exercises before test exercises (via the recommended book ordering)
|
|
||||||
- `options2`: Improved tests for layering options
|
|
||||||
- `modules2`: Added more information to the hint
|
|
||||||
|
|
||||||
#### Fixed
|
|
||||||
|
|
||||||
- `errors2`: Corrected a comment wording
|
|
||||||
- `iterators2`: Fixed a spelling mistake in the hint text
|
|
||||||
- `variables`: Wrapped the mut keyword with backticks for readability
|
|
||||||
- `move_semantics2`: Removed references to line numbers
|
|
||||||
- `cow1`: Clarified the `owned_no_mutation` comments
|
|
||||||
- `options3`: Changed exercise to panic when no match is found
|
|
||||||
- `rustlings lsp` now generates absolute paths, which should fix VSCode `rust-analyzer` usage on Windows
|
|
||||||
|
|
||||||
#### Housekeeping
|
|
||||||
|
|
||||||
- Added a markdown linter to run on GitHub actions
|
|
||||||
- Split quick installation section into two code blocks
|
|
||||||
|
|
||||||
<a name="5.4.1"></a>
|
|
||||||
## 5.4.1 (2023-03-10)
|
|
||||||
|
|
||||||
#### Changed
|
|
||||||
|
|
||||||
- `vecs`: Added links to `iter_mut` and `map` to README.md
|
|
||||||
- `cow1`: Changed main to tests
|
|
||||||
- `iterators1`: Formatted according to rustfmt
|
|
||||||
|
|
||||||
#### Fixed
|
|
||||||
|
|
||||||
- `errors5`: Unified undisclosed type notation
|
|
||||||
- `arc1`: Improved readability by avoiding implicit dereference
|
|
||||||
- `macros4`: Prevented auto-fix by adding `#[rustfmt::skip]`
|
|
||||||
- `cli`: Actually show correct progress percentages
|
|
||||||
|
|
||||||
<a name="5.4.0"></a>
|
|
||||||
|
|
||||||
## 5.4.0 (2023-02-12)
|
|
||||||
|
|
||||||
#### Changed
|
|
||||||
|
|
||||||
- Reordered exercises
|
|
||||||
- Unwrapped `standard_library_types` into `iterators` and `smart_pointers`
|
|
||||||
- Moved smart pointer exercises behind threads
|
|
||||||
- Ordered `rc1` before `arc1`
|
|
||||||
- **intro1**: Added a note on `rustlings lsp`
|
|
||||||
- **threads1**: Panic if threads are not joined
|
|
||||||
- **cli**:
|
|
||||||
- Made progress bar update proportional to amount of files verified
|
|
||||||
- Decreased `watch` delay from 2 to 1 second
|
|
||||||
|
|
||||||
#### Fixed
|
|
||||||
|
|
||||||
- Capitalized "Rust" in exercise hints
|
|
||||||
- **enums3**: Removed superfluous tuple brackets
|
|
||||||
- **quiz2, clippy1, iterators1**: Fixed a typo
|
|
||||||
- **rc1**: Fixed a prompt error
|
|
||||||
- **cli**:
|
|
||||||
- Fixed a typo in a method name
|
|
||||||
- Specified the edition in `rustc` commands
|
|
||||||
|
|
||||||
#### Housekeeping
|
|
||||||
|
|
||||||
- Bumped min Rust version to 1.58 in installation script
|
|
||||||
|
|
||||||
<a name="5.3.0"></a>
|
<a name="5.3.0"></a>
|
||||||
|
|
||||||
## 5.3.0 (2022-12-23)
|
## 5.3.0 (2022-12-23)
|
||||||
|
|
||||||
#### Added
|
#### Added
|
||||||
|
@ -177,7 +32,6 @@
|
||||||
- Added a note on Windows PowerShell and other shell compatibility
|
- Added a note on Windows PowerShell and other shell compatibility
|
||||||
|
|
||||||
<a name="5.2.1"></a>
|
<a name="5.2.1"></a>
|
||||||
|
|
||||||
## 5.2.1 (2022-09-06)
|
## 5.2.1 (2022-09-06)
|
||||||
|
|
||||||
#### Fixed
|
#### Fixed
|
||||||
|
@ -192,7 +46,6 @@
|
||||||
- Fixed a typo in README.md
|
- Fixed a typo in README.md
|
||||||
|
|
||||||
<a name="5.2.0"></a>
|
<a name="5.2.0"></a>
|
||||||
|
|
||||||
## 5.2.0 (2022-08-27)
|
## 5.2.0 (2022-08-27)
|
||||||
|
|
||||||
#### Added
|
#### Added
|
||||||
|
@ -210,7 +63,6 @@
|
||||||
the tests
|
the tests
|
||||||
|
|
||||||
<a name="5.1.1"></a>
|
<a name="5.1.1"></a>
|
||||||
|
|
||||||
## 5.1.1 (2022-08-17)
|
## 5.1.1 (2022-08-17)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
@ -218,7 +70,6 @@
|
||||||
- Fixed an incorrect assertion in options1
|
- Fixed an incorrect assertion in options1
|
||||||
|
|
||||||
<a name="5.1.0"></a>
|
<a name="5.1.0"></a>
|
||||||
|
|
||||||
## 5.1.0 (2022-08-16)
|
## 5.1.0 (2022-08-16)
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
@ -254,7 +105,6 @@
|
||||||
- Added a link to our Zulip in the readme file
|
- Added a link to our Zulip in the readme file
|
||||||
|
|
||||||
<a name="5.0.0"></a>
|
<a name="5.0.0"></a>
|
||||||
|
|
||||||
## 5.0.0 (2022-07-16)
|
## 5.0.0 (2022-07-16)
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
@ -312,7 +162,7 @@
|
||||||
- **from_str**: Added a hint comment about string error message conversion with
|
- **from_str**: Added a hint comment about string error message conversion with
|
||||||
`Box<dyn Error>`.
|
`Box<dyn Error>`.
|
||||||
- **try_from_into**: Fixed the function name in comment.
|
- **try_from_into**: Fixed the function name in comment.
|
||||||
|
|
||||||
#### Removed
|
#### Removed
|
||||||
|
|
||||||
- Removed the legacy LSP feature that was using `mod.rs` files.
|
- Removed the legacy LSP feature that was using `mod.rs` files.
|
||||||
|
@ -328,7 +178,6 @@
|
||||||
- Added a GitHub actions config so that tests run on every PR/commit.
|
- Added a GitHub actions config so that tests run on every PR/commit.
|
||||||
|
|
||||||
<a name="4.8.0"></a>
|
<a name="4.8.0"></a>
|
||||||
|
|
||||||
## 4.8.0 (2022-07-01)
|
## 4.8.0 (2022-07-01)
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
@ -350,7 +199,6 @@
|
||||||
- Removed the deprecated Rust GitPod extension.
|
- Removed the deprecated Rust GitPod extension.
|
||||||
|
|
||||||
<a name="4.7.1"></a>
|
<a name="4.7.1"></a>
|
||||||
|
|
||||||
## 4.7.1 (2022-04-20)
|
## 4.7.1 (2022-04-20)
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
@ -372,424 +220,422 @@
|
||||||
Git log.
|
Git log.
|
||||||
|
|
||||||
<a name="4.7.0"></a>
|
<a name="4.7.0"></a>
|
||||||
|
|
||||||
## 4.7.0 (2022-04-14)
|
## 4.7.0 (2022-04-14)
|
||||||
|
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Add move_semantics6.rs exercise (#908) ([3f0e1303](https://github.com/rust-lang/rustlings/commit/3f0e1303e0b3bf3fecc0baced3c8b8a37f83c184))
|
* Add move_semantics6.rs exercise (#908) ([3f0e1303](https://github.com/rust-lang/rustlings/commit/3f0e1303e0b3bf3fecc0baced3c8b8a37f83c184))
|
||||||
- **intro:** Add intro section. ([21c9f441](https://github.com/rust-lang/rustlings/commit/21c9f44168394e08338fd470b5f49b1fd235986f))
|
* **intro:** Add intro section. ([21c9f441](https://github.com/rust-lang/rustlings/commit/21c9f44168394e08338fd470b5f49b1fd235986f))
|
||||||
- Include exercises folder in the project structure behind a feature, enabling rust-analyzer to work (#917) ([179a75a6](https://github.com/rust-lang/rustlings/commit/179a75a68d03ac9518dec2297fb17f91a4fc506b))
|
* Include exercises folder in the project structure behind a feature, enabling rust-analyzer to work (#917) ([179a75a6](https://github.com/rust-lang/rustlings/commit/179a75a68d03ac9518dec2297fb17f91a4fc506b))
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- Fix a few spelling mistakes ([1c0fe3cb](https://github.com/rust-lang/rustlings/commit/1c0fe3cbcca85f90b3985985b8e265ee872a2ab2))
|
* Fix a few spelling mistakes ([1c0fe3cb](https://github.com/rust-lang/rustlings/commit/1c0fe3cbcca85f90b3985985b8e265ee872a2ab2))
|
||||||
- **cli:**
|
* **cli:**
|
||||||
- Move long text strings into constants. ([f78c4802](https://github.com/rust-lang/rustlings/commit/f78c48020830d7900dd8d81f355606581670446d))
|
* Move long text strings into constants. ([f78c4802](https://github.com/rust-lang/rustlings/commit/f78c48020830d7900dd8d81f355606581670446d))
|
||||||
- Replace `filter_map()` with `find_map()` ([9b27e8d](https://github.com/rust-lang/rustlings/commit/9b27e8d993ca20232fe38a412750c3f845a83b65))
|
* Replace `filter_map()` with `find_map()` ([9b27e8d](https://github.com/rust-lang/rustlings/commit/9b27e8d993ca20232fe38a412750c3f845a83b65))
|
||||||
- **clippy1:**
|
* **clippy1:**
|
||||||
- Set clippy::float_cmp lint to deny (#907) ([71a06044](https://github.com/rust-lang/rustlings/commit/71a06044e6a96ff756dc31d7b0ed665ae4badb57))
|
* Set clippy::float_cmp lint to deny (#907) ([71a06044](https://github.com/rust-lang/rustlings/commit/71a06044e6a96ff756dc31d7b0ed665ae4badb57))
|
||||||
- Updated code to test correctness clippy lint with approx_constant lint rule ([f2650de3](https://github.com/rust-lang/rustlings/commit/f2650de369810867d2763e935ac0963c32ec420e))
|
* Updated code to test correctness clippy lint with approx_constant lint rule ([f2650de3](https://github.com/rust-lang/rustlings/commit/f2650de369810867d2763e935ac0963c32ec420e))
|
||||||
- **errors1:**
|
* **errors1:**
|
||||||
- Add a comment to make the purpose more clear (#486) ([cbcde345](https://github.com/rust-lang/rustlings/commit/cbcde345409c3e550112e449242848eaa3391bb6))
|
* Add a comment to make the purpose more clear (#486) ([cbcde345](https://github.com/rust-lang/rustlings/commit/cbcde345409c3e550112e449242848eaa3391bb6))
|
||||||
- Don't modify tests (#958) ([60bb7cc](https://github.com/rust-lang/rustlings/commit/60bb7cc3931d21d3986ad52b2b302e632a93831c))
|
* Don't modify tests (#958) ([60bb7cc](https://github.com/rust-lang/rustlings/commit/60bb7cc3931d21d3986ad52b2b302e632a93831c))
|
||||||
- **errors6:** Remove existing answer code ([43d0623](https://github.com/rust-lang/rustlings/commit/43d0623086edbc46fe896ba59c7afa22c3da9f7a))
|
* **errors6:** Remove existing answer code ([43d0623](https://github.com/rust-lang/rustlings/commit/43d0623086edbc46fe896ba59c7afa22c3da9f7a))
|
||||||
- **functions5:** Remove wrong new line and small English improvements (#885) ([8ef4869b](https://github.com/rust-lang/rustlings/commit/8ef4869b264094e5a9b50452b4534823a9df19c3))
|
* **functions5:** Remove wrong new line and small English improvements (#885) ([8ef4869b](https://github.com/rust-lang/rustlings/commit/8ef4869b264094e5a9b50452b4534823a9df19c3))
|
||||||
- **install:** protect path with whitespaces using quotes and stop at the first error ([d114847f](https://github.com/rust-lang/rustlings/commit/d114847f256c5f571c0b4c87e04b04bce3435509))
|
* **install:** protect path with whitespaces using quotes and stop at the first error ([d114847f](https://github.com/rust-lang/rustlings/commit/d114847f256c5f571c0b4c87e04b04bce3435509))
|
||||||
- **intro1:** Add compiler error explanation. ([9b8de655](https://github.com/rust-lang/rustlings/commit/9b8de65525a5576b78cf0c8e4098cdd34296338f))
|
* **intro1:** Add compiler error explanation. ([9b8de655](https://github.com/rust-lang/rustlings/commit/9b8de65525a5576b78cf0c8e4098cdd34296338f))
|
||||||
- **iterators1:** reorder TODO steps ([0bd7a063](https://github.com/rust-lang/rustlings/commit/0bd7a0631a17a9d69af5746795a30efc9cf64e6e))
|
* **iterators1:** reorder TODO steps ([0bd7a063](https://github.com/rust-lang/rustlings/commit/0bd7a0631a17a9d69af5746795a30efc9cf64e6e))
|
||||||
- **move_semantics2:** Add comment ([89650f80](https://github.com/rust-lang/rustlings/commit/89650f808af23a32c9a2c6d46592b77547a6a464))
|
* **move_semantics2:** Add comment ([89650f80](https://github.com/rust-lang/rustlings/commit/89650f808af23a32c9a2c6d46592b77547a6a464))
|
||||||
- **move_semantics5:** correct typo (#857) ([46c28d5c](https://github.com/rust-lang/rustlings/commit/46c28d5cef3d8446b5a356b19d8dbc725f91a3a0))
|
* **move_semantics5:** correct typo (#857) ([46c28d5c](https://github.com/rust-lang/rustlings/commit/46c28d5cef3d8446b5a356b19d8dbc725f91a3a0))
|
||||||
- **quiz1:** update to say quiz covers "If" ([1622e8c1](https://github.com/rust-lang/rustlings/commit/1622e8c198d89739765c915203efff0091bdeb78))
|
* **quiz1:** update to say quiz covers "If" ([1622e8c1](https://github.com/rust-lang/rustlings/commit/1622e8c198d89739765c915203efff0091bdeb78))
|
||||||
- **structs3:**
|
* **structs3:**
|
||||||
- Add a hint for panic (#608) ([4f7ff5d9](https://github.com/rust-lang/rustlings/commit/4f7ff5d9c7b2d8b045194c1a9469d37e30257c4a))
|
* Add a hint for panic (#608) ([4f7ff5d9](https://github.com/rust-lang/rustlings/commit/4f7ff5d9c7b2d8b045194c1a9469d37e30257c4a))
|
||||||
- remove redundant 'return' (#852) ([bf33829d](https://github.com/rust-lang/rustlings/commit/bf33829da240375d086f96267fc2e02fa6b07001))
|
* remove redundant 'return' (#852) ([bf33829d](https://github.com/rust-lang/rustlings/commit/bf33829da240375d086f96267fc2e02fa6b07001))
|
||||||
- Assigned value to `cents_per_gram` in test ([d1ee2da](https://github.com/rust-lang/rustlings/commit/d1ee2daf14f19105e6db3f9c610f44293d688532))
|
* Assigned value to `cents_per_gram` in test ([d1ee2da](https://github.com/rust-lang/rustlings/commit/d1ee2daf14f19105e6db3f9c610f44293d688532))
|
||||||
- **structs3.rs:** assigned value to cents_per_gram in test ([d1ee2daf](https://github.com/rust-lang/rustlings/commit/d1ee2daf14f19105e6db3f9c610f44293d688532))
|
* **structs3.rs:** assigned value to cents_per_gram in test ([d1ee2daf](https://github.com/rust-lang/rustlings/commit/d1ee2daf14f19105e6db3f9c610f44293d688532))
|
||||||
- **traits1:** rename test functions to snake case (#854) ([1663a16e](https://github.com/rust-lang/rustlings/commit/1663a16eade6ca646b6ed061735f7982434d530d))
|
* **traits1:** rename test functions to snake case (#854) ([1663a16e](https://github.com/rust-lang/rustlings/commit/1663a16eade6ca646b6ed061735f7982434d530d))
|
||||||
|
|
||||||
#### Documentation improvements
|
#### Documentation improvements
|
||||||
|
|
||||||
- Add hints on how to get GCC installed (#741) ([bc56861](https://github.com/rust-lang/rustlings/commit/bc5686174463ad6f4f6b824b0e9b97c3039d4886))
|
* Add hints on how to get GCC installed (#741) ([bc56861](https://github.com/rust-lang/rustlings/commit/bc5686174463ad6f4f6b824b0e9b97c3039d4886))
|
||||||
- Fix some code blocks that were not highlighted ([17f9d74](https://github.com/rust-lang/rustlings/commit/17f9d7429ccd133a72e815fb5618e0ce79560929))
|
* Fix some code blocks that were not highlighted ([17f9d74](https://github.com/rust-lang/rustlings/commit/17f9d7429ccd133a72e815fb5618e0ce79560929))
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.0"></a>
|
<a name="4.6.0"></a>
|
||||||
|
|
||||||
## 4.6.0 (2021-09-25)
|
## 4.6.0 (2021-09-25)
|
||||||
|
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- add advanced_errs2 ([abd6b70c](https://github.com/rust-lang/rustlings/commit/abd6b70c72dc6426752ff41f09160b839e5c449e))
|
* add advanced_errs2 ([abd6b70c](https://github.com/rust-lang/rustlings/commit/abd6b70c72dc6426752ff41f09160b839e5c449e))
|
||||||
- add advanced_errs1 ([882d535b](https://github.com/rust-lang/rustlings/commit/882d535ba8628d5e0b37e8664b3e2f26260b2671))
|
* add advanced_errs1 ([882d535b](https://github.com/rust-lang/rustlings/commit/882d535ba8628d5e0b37e8664b3e2f26260b2671))
|
||||||
- Add a farewell message when quitting `watch` ([1caef0b4](https://github.com/rust-lang/rustlings/commit/1caef0b43494c8b8cdd6c9260147e70d510f1aca))
|
* Add a farewell message when quitting `watch` ([1caef0b4](https://github.com/rust-lang/rustlings/commit/1caef0b43494c8b8cdd6c9260147e70d510f1aca))
|
||||||
- add more watch commands ([a7dc080b](https://github.com/rust-lang/rustlings/commit/a7dc080b95e49146fbaafe6922a6de2f8cb1582a), closes [#842](https://github.com/rust-lang/rustlings/issues/842))
|
* add more watch commands ([a7dc080b](https://github.com/rust-lang/rustlings/commit/a7dc080b95e49146fbaafe6922a6de2f8cb1582a), closes [#842](https://github.com/rust-lang/rustlings/issues/842))
|
||||||
- **modules:** update exercises, add modules3 (#822) ([dfd2fab4](https://github.com/rust-lang/rustlings/commit/dfd2fab4f33d1bf59e2e5ee03123c0c9a67a9481))
|
* **modules:** update exercises, add modules3 (#822) ([dfd2fab4](https://github.com/rust-lang/rustlings/commit/dfd2fab4f33d1bf59e2e5ee03123c0c9a67a9481))
|
||||||
- **quiz1:** add default function name in comment (#838) ([0a11bad7](https://github.com/rust-lang/rustlings/commit/0a11bad71402b5403143d642f439f57931278c07))
|
* **quiz1:** add default function name in comment (#838) ([0a11bad7](https://github.com/rust-lang/rustlings/commit/0a11bad71402b5403143d642f439f57931278c07))
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- Correct small typo in exercises/conversions/from_str.rs ([86cc8529](https://github.com/rust-lang/rustlings/commit/86cc85295ae36948963ae52882e285d7e3e29323))
|
* Correct small typo in exercises/conversions/from_str.rs ([86cc8529](https://github.com/rust-lang/rustlings/commit/86cc85295ae36948963ae52882e285d7e3e29323))
|
||||||
- **cli:** typo in exercise.rs (#848) ([06d5c097](https://github.com/rust-lang/rustlings/commit/06d5c0973a3dffa3c6c6f70acb775d4c6630323c))
|
* **cli:** typo in exercise.rs (#848) ([06d5c097](https://github.com/rust-lang/rustlings/commit/06d5c0973a3dffa3c6c6f70acb775d4c6630323c))
|
||||||
- **from_str, try_from_into:** custom error types ([2dc93cad](https://github.com/rust-lang/rustlings/commit/2dc93caddad43821743e4903d89b355df58d7a49))
|
* **from_str, try_from_into:** custom error types ([2dc93cad](https://github.com/rust-lang/rustlings/commit/2dc93caddad43821743e4903d89b355df58d7a49))
|
||||||
- **modules2:** fix typo (#835) ([1c3beb0a](https://github.com/rust-lang/rustlings/commit/1c3beb0a59178c950dc05fe8ee2346b017429ae0))
|
* **modules2:** fix typo (#835) ([1c3beb0a](https://github.com/rust-lang/rustlings/commit/1c3beb0a59178c950dc05fe8ee2346b017429ae0))
|
||||||
- **move_semantics5:**
|
* **move_semantics5:**
|
||||||
- change &mut \*y to &mut x (#814) ([d75759e8](https://github.com/rust-lang/rustlings/commit/d75759e829fdcd64ef071cf4b6eae2a011a7718b))
|
* change &mut *y to &mut x (#814) ([d75759e8](https://github.com/rust-lang/rustlings/commit/d75759e829fdcd64ef071cf4b6eae2a011a7718b))
|
||||||
- Clarify instructions ([df25684c](https://github.com/rust-lang/rustlings/commit/df25684cb79f8413915e00b5efef29369849cef1))
|
* Clarify instructions ([df25684c](https://github.com/rust-lang/rustlings/commit/df25684cb79f8413915e00b5efef29369849cef1))
|
||||||
- **quiz1:** Fix inconsistent wording (#826) ([03131a3d](https://github.com/rust-lang/rustlings/commit/03131a3d35d9842598150f9da817f7cc26e2669a))
|
* **quiz1:** Fix inconsistent wording (#826) ([03131a3d](https://github.com/rust-lang/rustlings/commit/03131a3d35d9842598150f9da817f7cc26e2669a))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.5.0"></a>
|
<a name="4.5.0"></a>
|
||||||
|
|
||||||
## 4.5.0 (2021-07-07)
|
## 4.5.0 (2021-07-07)
|
||||||
|
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Add move_semantics5 exercise. (#746) ([399ab328](https://github.com/rust-lang/rustlings/commit/399ab328d8d407265c09563aa4ef4534b2503ff2))
|
* Add move_semantics5 exercise. (#746) ([399ab328](https://github.com/rust-lang/rustlings/commit/399ab328d8d407265c09563aa4ef4534b2503ff2))
|
||||||
- **cli:** Add "next" to run the next unsolved exercise. (#785) ([d20e413a](https://github.com/rust-lang/rustlings/commit/d20e413a68772cd493561f2651cf244e822b7ca5))
|
* **cli:** Add "next" to run the next unsolved exercise. (#785) ([d20e413a](https://github.com/rust-lang/rustlings/commit/d20e413a68772cd493561f2651cf244e822b7ca5))
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- rename result1 to errors4 ([50ab289d](https://github.com/rust-lang/rustlings/commit/50ab289da6b9eb19a7486c341b00048c516b88c0))
|
* rename result1 to errors4 ([50ab289d](https://github.com/rust-lang/rustlings/commit/50ab289da6b9eb19a7486c341b00048c516b88c0))
|
||||||
- move_semantics5 hints ([1b858285](https://github.com/rust-lang/rustlings/commit/1b85828548f46f58b622b5e0c00f8c989f928807))
|
* move_semantics5 hints ([1b858285](https://github.com/rust-lang/rustlings/commit/1b85828548f46f58b622b5e0c00f8c989f928807))
|
||||||
- remove trailing whitespaces from iterators1 ([4d4fa774](https://github.com/rust-lang/rustlings/commit/4d4fa77459392acd3581c6068aa8be9a02de12fc))
|
* remove trailing whitespaces from iterators1 ([4d4fa774](https://github.com/rust-lang/rustlings/commit/4d4fa77459392acd3581c6068aa8be9a02de12fc))
|
||||||
- add hints to generics1 and generics2 exercises ([31457940](https://github.com/rust-lang/rustlings/commit/31457940846b3844d78d4a4d2b074bc8d6aaf1eb))
|
* add hints to generics1 and generics2 exercises ([31457940](https://github.com/rust-lang/rustlings/commit/31457940846b3844d78d4a4d2b074bc8d6aaf1eb))
|
||||||
- remove trailing whitespace ([d9b69bd1](https://github.com/rust-lang/rustlings/commit/d9b69bd1a0a7a99f2c0d80933ad2eea44c8c71b2))
|
* remove trailing whitespace ([d9b69bd1](https://github.com/rust-lang/rustlings/commit/d9b69bd1a0a7a99f2c0d80933ad2eea44c8c71b2))
|
||||||
- **installation:** first PowerShell command ([aa9a943d](https://github.com/rust-lang/rustlings/commit/aa9a943ddf3ae260782e73c26bcc9db60e5894b6))
|
* **installation:** first PowerShell command ([aa9a943d](https://github.com/rust-lang/rustlings/commit/aa9a943ddf3ae260782e73c26bcc9db60e5894b6))
|
||||||
- **iterators5:** derive Clone, Copy ([91fc9e31](https://github.com/rust-lang/rustlings/commit/91fc9e3118f4af603c9911698cc2a234725cb032))
|
* **iterators5:** derive Clone, Copy ([91fc9e31](https://github.com/rust-lang/rustlings/commit/91fc9e3118f4af603c9911698cc2a234725cb032))
|
||||||
- **quiz1:** Updated question description (#794) ([d8766496](https://github.com/rust-lang/rustlings/commit/d876649616cc8a8dd5f539f8bc1a5434b960b1e9))
|
* **quiz1:** Updated question description (#794) ([d8766496](https://github.com/rust-lang/rustlings/commit/d876649616cc8a8dd5f539f8bc1a5434b960b1e9))
|
||||||
- **try_from_into, from_str:** hints for dyn Error ([11d2cf0d](https://github.com/rust-lang/rustlings/commit/11d2cf0d604dee3f5023c17802d69438e69fa50e))
|
* **try_from_into, from_str:** hints for dyn Error ([11d2cf0d](https://github.com/rust-lang/rustlings/commit/11d2cf0d604dee3f5023c17802d69438e69fa50e))
|
||||||
- **variables5:** confine the answer further ([48ffcbd2](https://github.com/rust-lang/rustlings/commit/48ffcbd2c4cc4d936c2c7480019190f179813cc5))
|
* **variables5:** confine the answer further ([48ffcbd2](https://github.com/rust-lang/rustlings/commit/48ffcbd2c4cc4d936c2c7480019190f179813cc5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.4.0"></a>
|
<a name="4.4.0"></a>
|
||||||
|
|
||||||
## 4.4.0 (2021-04-24)
|
## 4.4.0 (2021-04-24)
|
||||||
|
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- Fix spelling error in main.rs ([91ee27f2](https://github.com/rust-lang/rustlings/commit/91ee27f22bd3797a9db57e5fd430801c170c5db8))
|
* Fix spelling error in main.rs ([91ee27f2](https://github.com/rust-lang/rustlings/commit/91ee27f22bd3797a9db57e5fd430801c170c5db8))
|
||||||
- typo in default out text ([644c49f1](https://github.com/rust-lang/rustlings/commit/644c49f1e04cbb24e95872b3a52b07d692ae3bc8))
|
* typo in default out text ([644c49f1](https://github.com/rust-lang/rustlings/commit/644c49f1e04cbb24e95872b3a52b07d692ae3bc8))
|
||||||
- **collections:** Naming exercises for vectors and hashmap ([bef39b12](https://github.com/rust-lang/rustlings/commit/bef39b125961310b34b34871e480a82e82af4678))
|
* **collections:** Naming exercises for vectors and hashmap ([bef39b12](https://github.com/rust-lang/rustlings/commit/bef39b125961310b34b34871e480a82e82af4678))
|
||||||
- **from_str:**
|
* **from_str:**
|
||||||
- Correct typos ([5f7c89f8](https://github.com/rust-lang/rustlings/commit/5f7c89f85db1f33da01911eaa479c3a2d4721678))
|
* Correct typos ([5f7c89f8](https://github.com/rust-lang/rustlings/commit/5f7c89f85db1f33da01911eaa479c3a2d4721678))
|
||||||
- test for error instead of unwrap/should_panic ([15e71535](https://github.com/rust-lang/rustlings/commit/15e71535f37cfaed36e22eb778728d186e2104ab))
|
* test for error instead of unwrap/should_panic ([15e71535](https://github.com/rust-lang/rustlings/commit/15e71535f37cfaed36e22eb778728d186e2104ab))
|
||||||
- use trait objects for from_str ([c3e7b831](https://github.com/rust-lang/rustlings/commit/c3e7b831786c9172ed8bd5d150f3c432f242fba9))
|
* use trait objects for from_str ([c3e7b831](https://github.com/rust-lang/rustlings/commit/c3e7b831786c9172ed8bd5d150f3c432f242fba9))
|
||||||
- **functions3:** improve function argument type (#687) ([a6509cc4](https://github.com/rust-lang/rustlings/commit/a6509cc4d545d8825f01ddf7ee37823b372154dd))
|
* **functions3:** improve function argument type (#687) ([a6509cc4](https://github.com/rust-lang/rustlings/commit/a6509cc4d545d8825f01ddf7ee37823b372154dd))
|
||||||
- **hashmap2:** Update incorrect assertion (#660) ([72aaa15e](https://github.com/rust-lang/rustlings/commit/72aaa15e6ab4b72b3422f1c6356396e20a2a2bb8))
|
* **hashmap2:** Update incorrect assertion (#660) ([72aaa15e](https://github.com/rust-lang/rustlings/commit/72aaa15e6ab4b72b3422f1c6356396e20a2a2bb8))
|
||||||
- **info:** Fix typo (#635) ([cddc1e86](https://github.com/rust-lang/rustlings/commit/cddc1e86e7ec744ee644cc774a4887b1a0ded3e8))
|
* **info:** Fix typo (#635) ([cddc1e86](https://github.com/rust-lang/rustlings/commit/cddc1e86e7ec744ee644cc774a4887b1a0ded3e8))
|
||||||
- **iterators2:** Moved errors out of tests. ([baf4ba17](https://github.com/rust-lang/rustlings/commit/baf4ba175ba6eb92989e3dd54ecbec4bedc9a863), closes [#359](https://github.com/rust-lang/rustlings/issues/359))
|
* **iterators2:** Moved errors out of tests. ([baf4ba17](https://github.com/rust-lang/rustlings/commit/baf4ba175ba6eb92989e3dd54ecbec4bedc9a863), closes [#359](https://github.com/rust-lang/rustlings/issues/359))
|
||||||
- **iterators3:** Enabled iterators3.rs to run without commented out tests. ([c6712dfc](https://github.com/rust-lang/rustlings/commit/c6712dfccd1a093e590ad22bbc4f49edc417dac0))
|
* **iterators3:** Enabled iterators3.rs to run without commented out tests. ([c6712dfc](https://github.com/rust-lang/rustlings/commit/c6712dfccd1a093e590ad22bbc4f49edc417dac0))
|
||||||
- **main:** Let find_exercise work with borrows ([347f30bd](https://github.com/rust-lang/rustlings/commit/347f30bd867343c5ace1097e085a1f7e356553f7))
|
* **main:** Let find_exercise work with borrows ([347f30bd](https://github.com/rust-lang/rustlings/commit/347f30bd867343c5ace1097e085a1f7e356553f7))
|
||||||
- **move_semantics4:**
|
* **move_semantics4:**
|
||||||
- Remove redundant "instead" (#640) ([cc266d7d](https://github.com/rust-lang/rustlings/commit/cc266d7d80b91e79df3f61984f231b7f1587218e))
|
* Remove redundant "instead" (#640) ([cc266d7d](https://github.com/rust-lang/rustlings/commit/cc266d7d80b91e79df3f61984f231b7f1587218e))
|
||||||
- Small readbility improvement (#617) ([10965920](https://github.com/rust-lang/rustlings/commit/10965920fbdf8a1efc85bed869e55a1787006404))
|
* Small readbility improvement (#617) ([10965920](https://github.com/rust-lang/rustlings/commit/10965920fbdf8a1efc85bed869e55a1787006404))
|
||||||
- **option2:** Rename uninformative variables (#675) ([b4de6594](https://github.com/rust-lang/rustlings/commit/b4de6594380636817d13c2677ec6f472a964cf43))
|
* **option2:** Rename uninformative variables (#675) ([b4de6594](https://github.com/rust-lang/rustlings/commit/b4de6594380636817d13c2677ec6f472a964cf43))
|
||||||
- **quiz3:** Force an answer to Q2 (#672) ([0d894e6f](https://github.com/rust-lang/rustlings/commit/0d894e6ff739943901e1ae8c904582e5c2f843bd))
|
* **quiz3:** Force an answer to Q2 (#672) ([0d894e6f](https://github.com/rust-lang/rustlings/commit/0d894e6ff739943901e1ae8c904582e5c2f843bd))
|
||||||
- **structs:** Add 5.3 to structs/README (#652) ([6bd791f2](https://github.com/rust-lang/rustlings/commit/6bd791f2f44aa7f0ad926df767f6b1fa8f12a9a9))
|
* **structs:** Add 5.3 to structs/README (#652) ([6bd791f2](https://github.com/rust-lang/rustlings/commit/6bd791f2f44aa7f0ad926df767f6b1fa8f12a9a9))
|
||||||
- **structs2:** correct grammar in hint (#663) ([ebdb66c7](https://github.com/rust-lang/rustlings/commit/ebdb66c7bfb6d687a14cc511a559a222e6fc5de4))
|
* **structs2:** correct grammar in hint (#663) ([ebdb66c7](https://github.com/rust-lang/rustlings/commit/ebdb66c7bfb6d687a14cc511a559a222e6fc5de4))
|
||||||
- **structs3:**
|
* **structs3:**
|
||||||
- reword heading comment (#664) ([9f3e8c2d](https://github.com/rust-lang/rustlings/commit/9f3e8c2dde645e5264c2d2200e68842b5f47bfa3))
|
* reword heading comment (#664) ([9f3e8c2d](https://github.com/rust-lang/rustlings/commit/9f3e8c2dde645e5264c2d2200e68842b5f47bfa3))
|
||||||
- add check to prevent naive implementation of is_international ([05a753fe](https://github.com/rust-lang/rustlings/commit/05a753fe6333d36dbee5f68c21dec04eacdc75df))
|
* add check to prevent naive implementation of is_international ([05a753fe](https://github.com/rust-lang/rustlings/commit/05a753fe6333d36dbee5f68c21dec04eacdc75df))
|
||||||
- **threads1:** line number correction ([7857b0a6](https://github.com/rust-lang/rustlings/commit/7857b0a689b0847f48d8c14cbd1865e3b812d5ca))
|
* **threads1:** line number correction ([7857b0a6](https://github.com/rust-lang/rustlings/commit/7857b0a689b0847f48d8c14cbd1865e3b812d5ca))
|
||||||
- **try_from_into:** use trait objects ([2e93a588](https://github.com/rust-lang/rustlings/commit/2e93a588e0abe8badb7eafafb9e7d073c2be5df8))
|
* **try_from_into:** use trait objects ([2e93a588](https://github.com/rust-lang/rustlings/commit/2e93a588e0abe8badb7eafafb9e7d073c2be5df8))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Replace clap with argh ([7928122f](https://github.com/rust-lang/rustlings/commit/7928122fcef9ca7834d988b1ec8ca0687478beeb))
|
* Replace clap with argh ([7928122f](https://github.com/rust-lang/rustlings/commit/7928122fcef9ca7834d988b1ec8ca0687478beeb))
|
||||||
- Replace emojis when NO_EMOJI env variable present ([8d62a996](https://github.com/rust-lang/rustlings/commit/8d62a9963708dbecd9312e8bcc4b47049c72d155))
|
* Replace emojis when NO_EMOJI env variable present ([8d62a996](https://github.com/rust-lang/rustlings/commit/8d62a9963708dbecd9312e8bcc4b47049c72d155))
|
||||||
- Added iterators5.rs exercise. ([b29ea17e](https://github.com/rust-lang/rustlings/commit/b29ea17ea94d1862114af2cf5ced0e09c197dc35))
|
* Added iterators5.rs exercise. ([b29ea17e](https://github.com/rust-lang/rustlings/commit/b29ea17ea94d1862114af2cf5ced0e09c197dc35))
|
||||||
- **arc1:** Add more details to description and hint (#710) ([81be4044](https://github.com/rust-lang/rustlings/commit/81be40448777fa338ebced3b0bfc1b32d6370313))
|
* **arc1:** Add more details to description and hint (#710) ([81be4044](https://github.com/rust-lang/rustlings/commit/81be40448777fa338ebced3b0bfc1b32d6370313))
|
||||||
- **cli:** Improve the list command with options, and then some ([8bbe4ff1](https://github.com/rust-lang/rustlings/commit/8bbe4ff1385c5c169c90cd3ff9253f9a91daaf8e))
|
* **cli:** Improve the list command with options, and then some ([8bbe4ff1](https://github.com/rust-lang/rustlings/commit/8bbe4ff1385c5c169c90cd3ff9253f9a91daaf8e))
|
||||||
- **list:**
|
* **list:**
|
||||||
- updated progress percentage ([1c6f7e4b](https://github.com/rust-lang/rustlings/commit/1c6f7e4b7b9b3bd36f4da2bb2b69c549cc8bd913))
|
* updated progress percentage ([1c6f7e4b](https://github.com/rust-lang/rustlings/commit/1c6f7e4b7b9b3bd36f4da2bb2b69c549cc8bd913))
|
||||||
- added progress info ([c0e3daac](https://github.com/rust-lang/rustlings/commit/c0e3daacaf6850811df5bc57fa43e0f249d5cfa4))
|
* added progress info ([c0e3daac](https://github.com/rust-lang/rustlings/commit/c0e3daacaf6850811df5bc57fa43e0f249d5cfa4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.3.0"></a>
|
<a name="4.3.0"></a>
|
||||||
|
|
||||||
## 4.3.0 (2020-12-29)
|
## 4.3.0 (2020-12-29)
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Rewrite default out text ([44d39112](https://github.com/rust-lang/rustlings/commit/44d39112ff122b29c9793fe52e605df1612c6490))
|
* Rewrite default out text ([44d39112](https://github.com/rust-lang/rustlings/commit/44d39112ff122b29c9793fe52e605df1612c6490))
|
||||||
- match exercise order to book chapters (#541) ([033bf119](https://github.com/rust-lang/rustlings/commit/033bf1198fc8bfce1b570e49da7cde010aa552e3))
|
* match exercise order to book chapters (#541) ([033bf119](https://github.com/rust-lang/rustlings/commit/033bf1198fc8bfce1b570e49da7cde010aa552e3))
|
||||||
- Crab? (#586) ([fa9f522b](https://github.com/rust-lang/rustlings/commit/fa9f522b7f043d7ef73a39f003a9272dfe72c4f4))
|
* Crab? (#586) ([fa9f522b](https://github.com/rust-lang/rustlings/commit/fa9f522b7f043d7ef73a39f003a9272dfe72c4f4))
|
||||||
- add "rustlings list" command ([838f9f30](https://github.com/rust-lang/rustlings/commit/838f9f30083d0b23fd67503dcf0fbeca498e6647))
|
* add "rustlings list" command ([838f9f30](https://github.com/rust-lang/rustlings/commit/838f9f30083d0b23fd67503dcf0fbeca498e6647))
|
||||||
- **try_from_into:** remove duplicate annotation ([04f1d079](https://github.com/rust-lang/rustlings/commit/04f1d079aa42a2f49af694bc92c67d731d31a53f))
|
* **try_from_into:** remove duplicate annotation ([04f1d079](https://github.com/rust-lang/rustlings/commit/04f1d079aa42a2f49af694bc92c67d731d31a53f))
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- update structs README ([bcf14cf6](https://github.com/rust-lang/rustlings/commit/bcf14cf677adb3a38a3ac3ca53f3c69f61153025))
|
* update structs README ([bcf14cf6](https://github.com/rust-lang/rustlings/commit/bcf14cf677adb3a38a3ac3ca53f3c69f61153025))
|
||||||
- added missing exercises to info.toml ([90cfb6ff](https://github.com/rust-lang/rustlings/commit/90cfb6ff28377531bfc34acb70547bdb13374f6b))
|
* added missing exercises to info.toml ([90cfb6ff](https://github.com/rust-lang/rustlings/commit/90cfb6ff28377531bfc34acb70547bdb13374f6b))
|
||||||
- gives a bit more context to magic number ([30644c9a](https://github.com/rust-lang/rustlings/commit/30644c9a062b825c0ea89435dc59f0cad86b110e))
|
* gives a bit more context to magic number ([30644c9a](https://github.com/rust-lang/rustlings/commit/30644c9a062b825c0ea89435dc59f0cad86b110e))
|
||||||
- **functions2:** Change signature to trigger precise error message: (#605) ([0ef95947](https://github.com/rust-lang/rustlings/commit/0ef95947cc30482e63a7045be6cc2fb6f6dcb4cc))
|
* **functions2:** Change signature to trigger precise error message: (#605) ([0ef95947](https://github.com/rust-lang/rustlings/commit/0ef95947cc30482e63a7045be6cc2fb6f6dcb4cc))
|
||||||
- **structs1:** Adjust wording (#573) ([9334783d](https://github.com/rust-lang/rustlings/commit/9334783da31d821cc59174fbe8320df95828926c))
|
* **structs1:** Adjust wording (#573) ([9334783d](https://github.com/rust-lang/rustlings/commit/9334783da31d821cc59174fbe8320df95828926c))
|
||||||
- **try_from_into:**
|
* **try_from_into:**
|
||||||
- type error ([4f4cfcf3](https://github.com/rust-lang/rustlings/commit/4f4cfcf3c36c8718c7c170c9c3a6935e6ef0618c))
|
* type error ([4f4cfcf3](https://github.com/rust-lang/rustlings/commit/4f4cfcf3c36c8718c7c170c9c3a6935e6ef0618c))
|
||||||
- Update description (#584) ([96347df9](https://github.com/rust-lang/rustlings/commit/96347df9df294f01153b29d9ad4ba361f665c755))
|
* Update description (#584) ([96347df9](https://github.com/rust-lang/rustlings/commit/96347df9df294f01153b29d9ad4ba361f665c755))
|
||||||
- **vec1:** Have test compare every element in a and v ([9b6c6293](https://github.com/rust-lang/rustlings/commit/9b6c629397b24b944f484f5b2bbd8144266b5695))
|
* **vec1:** Have test compare every element in a and v ([9b6c6293](https://github.com/rust-lang/rustlings/commit/9b6c629397b24b944f484f5b2bbd8144266b5695))
|
||||||
|
|
||||||
<a name="4.2.0"></a>
|
<a name="4.2.0"></a>
|
||||||
|
|
||||||
## 4.2.0 (2020-11-07)
|
## 4.2.0 (2020-11-07)
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Add HashMap exercises ([633c00cf](https://github.com/rust-lang/rustlings/commit/633c00cf8071e1e82959a3010452a32f34f29fc9))
|
* Add HashMap exercises ([633c00cf](https://github.com/rust-lang/rustlings/commit/633c00cf8071e1e82959a3010452a32f34f29fc9))
|
||||||
- Add Vec exercises ([0c12fa31](https://github.com/rust-lang/rustlings/commit/0c12fa31c57c03c6287458a0a8aca7afd057baf6))
|
* Add Vec exercises ([0c12fa31](https://github.com/rust-lang/rustlings/commit/0c12fa31c57c03c6287458a0a8aca7afd057baf6))
|
||||||
- **primitive_types6:** Add a test (#548) ([2b1fb2b7](https://github.com/rust-lang/rustlings/commit/2b1fb2b739bf9ad8d6b7b12af25fee173011bfc4))
|
* **primitive_types6:** Add a test (#548) ([2b1fb2b7](https://github.com/rust-lang/rustlings/commit/2b1fb2b739bf9ad8d6b7b12af25fee173011bfc4))
|
||||||
- **try_from_into:** Add tests (#571) ([95ccd926](https://github.com/rust-lang/rustlings/commit/95ccd92616ae79ba287cce221101e0bbe4f68cdc))
|
* **try_from_into:** Add tests (#571) ([95ccd926](https://github.com/rust-lang/rustlings/commit/95ccd92616ae79ba287cce221101e0bbe4f68cdc))
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- log error output when inotify limit is exceeded ([d61b4e5a](https://github.com/rust-lang/rustlings/commit/d61b4e5a13b44d72d004082f523fa1b6b24c1aca))
|
* log error output when inotify limit is exceeded ([d61b4e5a](https://github.com/rust-lang/rustlings/commit/d61b4e5a13b44d72d004082f523fa1b6b24c1aca))
|
||||||
- more unique temp_file ([5643ef05](https://github.com/rust-lang/rustlings/commit/5643ef05bc81e4a840e9456f4406a769abbe1392))
|
* more unique temp_file ([5643ef05](https://github.com/rust-lang/rustlings/commit/5643ef05bc81e4a840e9456f4406a769abbe1392))
|
||||||
- **installation:** Update the MinRustVersion ([21bfb2d4](https://github.com/rust-lang/rustlings/commit/21bfb2d4777429c87d8d3b5fbf0ce66006dcd034))
|
* **installation:** Update the MinRustVersion ([21bfb2d4](https://github.com/rust-lang/rustlings/commit/21bfb2d4777429c87d8d3b5fbf0ce66006dcd034))
|
||||||
- **iterators2:** Update description (#578) ([197d3a3d](https://github.com/rust-lang/rustlings/commit/197d3a3d8961b2465579218a6749b2b2cefa8ddd))
|
* **iterators2:** Update description (#578) ([197d3a3d](https://github.com/rust-lang/rustlings/commit/197d3a3d8961b2465579218a6749b2b2cefa8ddd))
|
||||||
- **primitive_types6:**
|
* **primitive_types6:**
|
||||||
- remove 'unused doc comment' warning ([472d8592](https://github.com/rust-lang/rustlings/commit/472d8592d65c8275332a20dfc269e7ac0d41bc88))
|
* remove 'unused doc comment' warning ([472d8592](https://github.com/rust-lang/rustlings/commit/472d8592d65c8275332a20dfc269e7ac0d41bc88))
|
||||||
- missing comma in test ([4fb230da](https://github.com/rust-lang/rustlings/commit/4fb230daf1251444fcf29e085cee222a91f8a37e))
|
* missing comma in test ([4fb230da](https://github.com/rust-lang/rustlings/commit/4fb230daf1251444fcf29e085cee222a91f8a37e))
|
||||||
- **quiz3:** Second test is for odd numbers, not even. (#553) ([18e0bfef](https://github.com/rust-lang/rustlings/commit/18e0bfef1de53071e353ba1ec5837002ff7290e6))
|
* **quiz3:** Second test is for odd numbers, not even. (#553) ([18e0bfef](https://github.com/rust-lang/rustlings/commit/18e0bfef1de53071e353ba1ec5837002ff7290e6))
|
||||||
|
|
||||||
<a name="4.1.0"></a>
|
<a name="4.1.0"></a>
|
||||||
|
|
||||||
## 4.1.0 (2020-10-05)
|
## 4.1.0 (2020-10-05)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- Update rustlings version in Cargo.lock ([1cc40bc9](https://github.com/rust-lang/rustlings/commit/1cc40bc9ce95c23d56f6d91fa1c4deb646231fef))
|
* Update rustlings version in Cargo.lock ([1cc40bc9](https://github.com/rust-lang/rustlings/commit/1cc40bc9ce95c23d56f6d91fa1c4deb646231fef))
|
||||||
- **arc1:** index mod should equal thread count ([b4062ef6](https://github.com/rust-lang/rustlings/commit/b4062ef6993e80dac107c4093ea85166ad3ee0fa))
|
* **arc1:** index mod should equal thread count ([b4062ef6](https://github.com/rust-lang/rustlings/commit/b4062ef6993e80dac107c4093ea85166ad3ee0fa))
|
||||||
- **enums3:** Update Message::ChangeColor to take a tuple. (#457) ([4b6540c7](https://github.com/rust-lang/rustlings/commit/4b6540c71adabad647de8a09e57295e7c7c7d794))
|
* **enums3:** Update Message::ChangeColor to take a tuple. (#457) ([4b6540c7](https://github.com/rust-lang/rustlings/commit/4b6540c71adabad647de8a09e57295e7c7c7d794))
|
||||||
- **exercises:** adding question mark to quiz2 ([101072ab](https://github.com/rust-lang/rustlings/commit/101072ab9f8c80b40b8b88cb06cbe38aca2481c5))
|
* **exercises:** adding question mark to quiz2 ([101072ab](https://github.com/rust-lang/rustlings/commit/101072ab9f8c80b40b8b88cb06cbe38aca2481c5))
|
||||||
- **generics3:** clarify grade change ([47f7672c](https://github.com/rust-lang/rustlings/commit/47f7672c0307732056e7426e81d351f0dd7e22e5))
|
* **generics3:** clarify grade change ([47f7672c](https://github.com/rust-lang/rustlings/commit/47f7672c0307732056e7426e81d351f0dd7e22e5))
|
||||||
- **structs3:** Small adjustment of variable name ([114b54cb](https://github.com/rust-lang/rustlings/commit/114b54cbdb977234b39e5f180d937c14c78bb8b2))
|
* **structs3:** Small adjustment of variable name ([114b54cb](https://github.com/rust-lang/rustlings/commit/114b54cbdb977234b39e5f180d937c14c78bb8b2))
|
||||||
- **using_as:** Add test so that proper type is returned. (#512) ([3286c5ec](https://github.com/rust-lang/rustlings/commit/3286c5ec19ea5fb7ded81d047da5f8594108a490))
|
* **using_as:** Add test so that proper type is returned. (#512) ([3286c5ec](https://github.com/rust-lang/rustlings/commit/3286c5ec19ea5fb7ded81d047da5f8594108a490))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Added iterators1.rs exercise ([9642f5a3](https://github.com/rust-lang/rustlings/commit/9642f5a3f686270a4f8f6ba969919ddbbc4f7fdd))
|
* Added iterators1.rs exercise ([9642f5a3](https://github.com/rust-lang/rustlings/commit/9642f5a3f686270a4f8f6ba969919ddbbc4f7fdd))
|
||||||
- Add ability to run rustlings on repl.it (#471) ([8f7b5bd0](https://github.com/rust-lang/rustlings/commit/8f7b5bd00eb83542b959830ef55192d2d76db90a))
|
* Add ability to run rustlings on repl.it (#471) ([8f7b5bd0](https://github.com/rust-lang/rustlings/commit/8f7b5bd00eb83542b959830ef55192d2d76db90a))
|
||||||
- Add gitpod support (#473) ([4821a8be](https://github.com/rust-lang/rustlings/commit/4821a8be94af4f669042a06ab917934cfacd032f))
|
* Add gitpod support (#473) ([4821a8be](https://github.com/rust-lang/rustlings/commit/4821a8be94af4f669042a06ab917934cfacd032f))
|
||||||
- Remind the user of the hint option (#425) ([816b1f5e](https://github.com/rust-lang/rustlings/commit/816b1f5e85d6cc6e72673813a85d0ada2a8f84af))
|
* Remind the user of the hint option (#425) ([816b1f5e](https://github.com/rust-lang/rustlings/commit/816b1f5e85d6cc6e72673813a85d0ada2a8f84af))
|
||||||
- Remind the user of the hint option (#425) ([9f61db5d](https://github.com/rust-lang/rustlings/commit/9f61db5dbe38538cf06571fcdd5f806e7901e83a))
|
* Remind the user of the hint option (#425) ([9f61db5d](https://github.com/rust-lang/rustlings/commit/9f61db5dbe38538cf06571fcdd5f806e7901e83a))
|
||||||
- **cli:** Added 'cls' command to 'watch' mode (#474) ([4f2468e1](https://github.com/rust-lang/rustlings/commit/4f2468e14f574a93a2e9b688367b5752ed96ae7b))
|
* **cli:** Added 'cls' command to 'watch' mode (#474) ([4f2468e1](https://github.com/rust-lang/rustlings/commit/4f2468e14f574a93a2e9b688367b5752ed96ae7b))
|
||||||
- **try_from_into:** Add insufficient length test (#469) ([523d18b8](https://github.com/rust-lang/rustlings/commit/523d18b873a319f7c09262f44bd40e2fab1830e5))
|
* **try_from_into:** Add insufficient length test (#469) ([523d18b8](https://github.com/rust-lang/rustlings/commit/523d18b873a319f7c09262f44bd40e2fab1830e5))
|
||||||
|
|
||||||
<a name="4.0.0"></a>
|
<a name="4.0.0"></a>
|
||||||
|
|
||||||
## 4.0.0 (2020-07-08)
|
## 4.0.0 (2020-07-08)
|
||||||
|
|
||||||
#### Breaking Changes
|
#### Breaking Changes
|
||||||
|
|
||||||
- Add a --nocapture option to display test harnesses' outputs ([8ad5f9bf](https://github.com/rust-lang/rustlings/commit/8ad5f9bf531a4848b1104b7b389a20171624c82f))
|
* Add a --nocapture option to display test harnesses' outputs ([8ad5f9bf](https://github.com/rust-lang/rustlings/commit/8ad5f9bf531a4848b1104b7b389a20171624c82f))
|
||||||
- Rename test to quiz, fixes #244 ([010a0456](https://github.com/rust-lang/rustlings/commit/010a04569282149cea7f7a76fc4d7f4c9f0f08dd))
|
* Rename test to quiz, fixes #244 ([010a0456](https://github.com/rust-lang/rustlings/commit/010a04569282149cea7f7a76fc4d7f4c9f0f08dd))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Add traits README ([173bb141](https://github.com/rust-lang/rustlings/commit/173bb14140c5530cbdb59e53ace3991a99d804af))
|
* Add traits README ([173bb141](https://github.com/rust-lang/rustlings/commit/173bb14140c5530cbdb59e53ace3991a99d804af))
|
||||||
- Add box1.rs exercise ([7479a473](https://github.com/rust-lang/rustlings/commit/7479a4737bdcac347322ad0883ca528c8675e720))
|
* Add box1.rs exercise ([7479a473](https://github.com/rust-lang/rustlings/commit/7479a4737bdcac347322ad0883ca528c8675e720))
|
||||||
- Rewrite try_from_into (#393) ([763aa6e3](https://github.com/rust-lang/rustlings/commit/763aa6e378a586caae2d8d63755a85eeba227933))
|
* Rewrite try_from_into (#393) ([763aa6e3](https://github.com/rust-lang/rustlings/commit/763aa6e378a586caae2d8d63755a85eeba227933))
|
||||||
- Add if2 exercise ([1da84b5f](https://github.com/rust-lang/rustlings/commit/1da84b5f7c489f65bd683c244f13c7d1ee812df0))
|
* Add if2 exercise ([1da84b5f](https://github.com/rust-lang/rustlings/commit/1da84b5f7c489f65bd683c244f13c7d1ee812df0))
|
||||||
- Added exercise structs3.rs ([b66e2e09](https://github.com/rust-lang/rustlings/commit/b66e2e09622243e086a0f1258dd27e1a2d61c891))
|
* Added exercise structs3.rs ([b66e2e09](https://github.com/rust-lang/rustlings/commit/b66e2e09622243e086a0f1258dd27e1a2d61c891))
|
||||||
- Add exercise variables6 covering const (#352) ([5999acd2](https://github.com/rust-lang/rustlings/commit/5999acd24a4f203292be36e0fd18d385887ec481))
|
* Add exercise variables6 covering const (#352) ([5999acd2](https://github.com/rust-lang/rustlings/commit/5999acd24a4f203292be36e0fd18d385887ec481))
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- Change then to than ([ddd98ad7](https://github.com/rust-lang/rustlings/commit/ddd98ad75d3668fbb10eff74374148aa5ed2344d))
|
* Change then to than ([ddd98ad7](https://github.com/rust-lang/rustlings/commit/ddd98ad75d3668fbb10eff74374148aa5ed2344d))
|
||||||
- rename quiz1 to tests1 in info (#420) ([0dd1c6ca](https://github.com/rust-lang/rustlings/commit/0dd1c6ca6b389789e0972aa955fe17aa15c95f29))
|
* rename quiz1 to tests1 in info (#420) ([0dd1c6ca](https://github.com/rust-lang/rustlings/commit/0dd1c6ca6b389789e0972aa955fe17aa15c95f29))
|
||||||
- fix quiz naming inconsistency (#421) ([5563adbb](https://github.com/rust-lang/rustlings/commit/5563adbb890587fc48fbbc9c4028642687f1e85b))
|
* fix quiz naming inconsistency (#421) ([5563adbb](https://github.com/rust-lang/rustlings/commit/5563adbb890587fc48fbbc9c4028642687f1e85b))
|
||||||
- confine the user further in variable exercises ([06ef4cc6](https://github.com/rust-lang/rustlings/commit/06ef4cc654e75d22a526812919ee49b8956280bf))
|
* confine the user further in variable exercises ([06ef4cc6](https://github.com/rust-lang/rustlings/commit/06ef4cc654e75d22a526812919ee49b8956280bf))
|
||||||
- update iterator and macro text for typos and clarity ([95900828](https://github.com/rust-lang/rustlings/commit/959008284834bece0196a01e17ac69a7e3590116))
|
* update iterator and macro text for typos and clarity ([95900828](https://github.com/rust-lang/rustlings/commit/959008284834bece0196a01e17ac69a7e3590116))
|
||||||
- update generics2 closes #362 ([964c974a](https://github.com/rust-lang/rustlings/commit/964c974a0274199d755073b917c2bc5da0c9b4f1))
|
* update generics2 closes #362 ([964c974a](https://github.com/rust-lang/rustlings/commit/964c974a0274199d755073b917c2bc5da0c9b4f1))
|
||||||
- confusing comment in conversions/try_from_into.rs ([c9e4f2cf](https://github.com/rust-lang/rustlings/commit/c9e4f2cfb4c48d0b7451263cfb43b9426438122d))
|
* confusing comment in conversions/try_from_into.rs ([c9e4f2cf](https://github.com/rust-lang/rustlings/commit/c9e4f2cfb4c48d0b7451263cfb43b9426438122d))
|
||||||
- **arc1:** Passively introduce attributes (#429) ([113cdae2](https://github.com/rust-lang/rustlings/commit/113cdae2d4e4c55905e8056ad326ede7fd7de356))
|
* **arc1:** Passively introduce attributes (#429) ([113cdae2](https://github.com/rust-lang/rustlings/commit/113cdae2d4e4c55905e8056ad326ede7fd7de356))
|
||||||
- **box1:** fix comment typo (#426) ([bb2ca251](https://github.com/rust-lang/rustlings/commit/bb2ca251106b27a7272d9a30872904dd1376654c))
|
* **box1:** fix comment typo (#426) ([bb2ca251](https://github.com/rust-lang/rustlings/commit/bb2ca251106b27a7272d9a30872904dd1376654c))
|
||||||
- **errorsn:** Try harder to confine the user. (#388) ([2b20c8a0](https://github.com/rust-lang/rustlings/commit/2b20c8a0f5774d07c58d110d75879f33fc6273b5))
|
* **errorsn:** Try harder to confine the user. (#388) ([2b20c8a0](https://github.com/rust-lang/rustlings/commit/2b20c8a0f5774d07c58d110d75879f33fc6273b5))
|
||||||
- **from_into.rs:** typo ([a901499e](https://github.com/rust-lang/rustlings/commit/a901499ededd3ce1995164700514fe4e9a0373ea))
|
* **from_into.rs:** typo ([a901499e](https://github.com/rust-lang/rustlings/commit/a901499ededd3ce1995164700514fe4e9a0373ea))
|
||||||
- **generics2:** Guide students to the answer (#430) ([e6bd8021](https://github.com/rust-lang/rustlings/commit/e6bd8021d9a7dd06feebc30c9d5f953901d7b419))
|
* **generics2:** Guide students to the answer (#430) ([e6bd8021](https://github.com/rust-lang/rustlings/commit/e6bd8021d9a7dd06feebc30c9d5f953901d7b419))
|
||||||
- **installation:**
|
* **installation:**
|
||||||
- Provide a backup git reference when tag can't be curl ([9e4fb100](https://github.com/rust-lang/rustlings/commit/9e4fb1009f1c9e3433915c03e22c2af422e5c5fe))
|
* Provide a backup git reference when tag can't be curl ([9e4fb100](https://github.com/rust-lang/rustlings/commit/9e4fb1009f1c9e3433915c03e22c2af422e5c5fe))
|
||||||
- Check if python is available while checking for git,rustc and cargo ([9cfb617d](https://github.com/rust-lang/rustlings/commit/9cfb617d5b0451b4b51644a1298965390cda9884))
|
* Check if python is available while checking for git,rustc and cargo ([9cfb617d](https://github.com/rust-lang/rustlings/commit/9cfb617d5b0451b4b51644a1298965390cda9884))
|
||||||
- **option1:**
|
* **option1:**
|
||||||
- Don't add only zeros to the numbers array ([cce6a442](https://github.com/rust-lang/rustlings/commit/cce6a4427718724a9096800754cd3abeca6a1580))
|
* Don't add only zeros to the numbers array ([cce6a442](https://github.com/rust-lang/rustlings/commit/cce6a4427718724a9096800754cd3abeca6a1580))
|
||||||
- Add cast to usize, as it is confusing in the context of an exercise about Option ([f6cffc7e](https://github.com/rust-lang/rustlings/commit/f6cffc7e487b42f15a6f958e49704c93a8d4465b))
|
* Add cast to usize, as it is confusing in the context of an exercise about Option ([f6cffc7e](https://github.com/rust-lang/rustlings/commit/f6cffc7e487b42f15a6f958e49704c93a8d4465b))
|
||||||
- **option2:** Add TODO to comments (#400) ([10967bce](https://github.com/rust-lang/rustlings/commit/10967bce57682812dc0891a9f9757da1a9d87404))
|
* **option2:** Add TODO to comments (#400) ([10967bce](https://github.com/rust-lang/rustlings/commit/10967bce57682812dc0891a9f9757da1a9d87404))
|
||||||
- **options1:** Add hint about Array Initialization (#389) ([9f75554f](https://github.com/rust-lang/rustlings/commit/9f75554f2a30295996f03f0160b98c0458305502))
|
* **options1:** Add hint about Array Initialization (#389) ([9f75554f](https://github.com/rust-lang/rustlings/commit/9f75554f2a30295996f03f0160b98c0458305502))
|
||||||
- **test2:** name of type String and &str (#394) ([d6c0a688](https://github.com/rust-lang/rustlings/commit/d6c0a688e6a96f93ad60d540d4b326f342fc0d45))
|
* **test2:** name of type String and &str (#394) ([d6c0a688](https://github.com/rust-lang/rustlings/commit/d6c0a688e6a96f93ad60d540d4b326f342fc0d45))
|
||||||
- **variables6:** minor typo (#419) ([524e17df](https://github.com/rust-lang/rustlings/commit/524e17df10db95f7b90a0f75cc8997182a8a4094))
|
* **variables6:** minor typo (#419) ([524e17df](https://github.com/rust-lang/rustlings/commit/524e17df10db95f7b90a0f75cc8997182a8a4094))
|
||||||
|
|
||||||
<a name="3.0.0"></a>
|
<a name="3.0.0"></a>
|
||||||
|
|
||||||
## 3.0.0 (2020-04-11)
|
## 3.0.0 (2020-04-11)
|
||||||
|
|
||||||
#### Breaking Changes
|
#### Breaking Changes
|
||||||
|
|
||||||
- make "compile" exercises print output (#278) ([3b6d5c](https://github.com/fmoko/rustlings/commit/3b6d5c3aaa27a242a832799eb66e96897d26fde3))
|
* make "compile" exercises print output (#278) ([3b6d5c](https://github.com/fmoko/rustlings/commit/3b6d5c3aaa27a242a832799eb66e96897d26fde3))
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- **primitive_types:** revert primitive_types4 (#296) ([b3a3351e](https://github.com/rust-lang/rustlings/commit/b3a3351e8e6a0bdee07077d7b0382953821649ae))
|
* **primitive_types:** revert primitive_types4 (#296) ([b3a3351e](https://github.com/rust-lang/rustlings/commit/b3a3351e8e6a0bdee07077d7b0382953821649ae))
|
||||||
- **run:** compile clippy exercise files (#295) ([3ab084a4](https://github.com/rust-lang/rustlings/commit/3ab084a421c0f140ae83bf1fc3f47b39342e7373))
|
* **run:** compile clippy exercise files (#295) ([3ab084a4](https://github.com/rust-lang/rustlings/commit/3ab084a421c0f140ae83bf1fc3f47b39342e7373))
|
||||||
- **conversions:**
|
* **conversions:**
|
||||||
- add additional test to meet exercise rules (#284) ([bc22ec3](https://github.com/fmoko/rustlings/commit/bc22ec382f843347333ef1301fc1bad773657f38))
|
* add additional test to meet exercise rules (#284) ([bc22ec3](https://github.com/fmoko/rustlings/commit/bc22ec382f843347333ef1301fc1bad773657f38))
|
||||||
- remove duplicate not done comment (#292) ([dab90f](https://github.com/fmoko/rustlings/commit/dab90f7b91a6000fe874e3d664f244048e5fa342))
|
* remove duplicate not done comment (#292) ([dab90f](https://github.com/fmoko/rustlings/commit/dab90f7b91a6000fe874e3d664f244048e5fa342))
|
||||||
- don't hardcode documentation version for traits (#288) ([30e6af](https://github.com/fmoko/rustlings/commit/30e6af60690c326fb5d3a9b7335f35c69c09137d))
|
* don't hardcode documentation version for traits (#288) ([30e6af](https://github.com/fmoko/rustlings/commit/30e6af60690c326fb5d3a9b7335f35c69c09137d))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- add Option2 exercise (#290) ([86b5c08b](https://github.com/rust-lang/rustlings/commit/86b5c08b9bea1576127a7c5f599f5752072c087d))
|
* add Option2 exercise (#290) ([86b5c08b](https://github.com/rust-lang/rustlings/commit/86b5c08b9bea1576127a7c5f599f5752072c087d))
|
||||||
- add exercise for option (#282) ([135e5d47](https://github.com/rust-lang/rustlings/commit/135e5d47a7c395aece6f6022117fb20c82f2d3d4))
|
* add exercise for option (#282) ([135e5d47](https://github.com/rust-lang/rustlings/commit/135e5d47a7c395aece6f6022117fb20c82f2d3d4))
|
||||||
- add new exercises for generics (#280) ([76be5e4e](https://github.com/rust-lang/rustlings/commit/76be5e4e991160f5fd9093f03ee2ba260e8f7229))
|
* add new exercises for generics (#280) ([76be5e4e](https://github.com/rust-lang/rustlings/commit/76be5e4e991160f5fd9093f03ee2ba260e8f7229))
|
||||||
- **ci:** add buildkite config ([b049fa2c](https://github.com/rust-lang/rustlings/commit/b049fa2c84dba0f0c8906ac44e28fd45fba51a71))
|
* **ci:** add buildkite config ([b049fa2c](https://github.com/rust-lang/rustlings/commit/b049fa2c84dba0f0c8906ac44e28fd45fba51a71))
|
||||||
|
|
||||||
<a name="2.2.1"></a>
|
<a name="2.2.1"></a>
|
||||||
|
|
||||||
### 2.2.1 (2020-02-27)
|
### 2.2.1 (2020-02-27)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- Re-add cloning the repo to install scripts ([3d9b03c5](https://github.com/rust-lang/rustlings/commit/3d9b03c52b8dc51b140757f6fd25ad87b5782ef5))
|
* Re-add cloning the repo to install scripts ([3d9b03c5](https://github.com/rust-lang/rustlings/commit/3d9b03c52b8dc51b140757f6fd25ad87b5782ef5))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Add clippy lints (#269) ([1e2fd9c9](https://github.com/rust-lang/rustlings/commit/1e2fd9c92f8cd6e389525ca1a999fca4c90b5921))
|
* Add clippy lints (#269) ([1e2fd9c9](https://github.com/rust-lang/rustlings/commit/1e2fd9c92f8cd6e389525ca1a999fca4c90b5921))
|
||||||
|
|
||||||
<a name="2.2.0"></a>
|
<a name="2.2.0"></a>
|
||||||
|
|
||||||
## 2.2.0 (2020-02-25)
|
## 2.2.0 (2020-02-25)
|
||||||
|
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- Update deps to version compatable with aarch64-pc-windows (#263) ([19a93428](https://github.com/rust-lang/rustlings/commit/19a93428b3c73d994292671f829bdc8e5b7b3401))
|
* Update deps to version compatable with aarch64-pc-windows (#263) ([19a93428](https://github.com/rust-lang/rustlings/commit/19a93428b3c73d994292671f829bdc8e5b7b3401))
|
||||||
- **docs:**
|
* **docs:**
|
||||||
- Added a necessary step to Windows installation process (#242) ([3906efcd](https://github.com/rust-lang/rustlings/commit/3906efcd52a004047b460ed548037093de3f523f))
|
* Added a necessary step to Windows installation process (#242) ([3906efcd](https://github.com/rust-lang/rustlings/commit/3906efcd52a004047b460ed548037093de3f523f))
|
||||||
- Fixed mangled sentence from book; edited for clarity (#266) ([ade52ff](https://github.com/rust-lang/rustlings/commit/ade52ffb739987287ddd5705944c8777705faed9))
|
* Fixed mangled sentence from book; edited for clarity (#266) ([ade52ff](https://github.com/rust-lang/rustlings/commit/ade52ffb739987287ddd5705944c8777705faed9))
|
||||||
- Updated iterators readme to account for iterators4 exercise (#273) ([bec8e3a](https://github.com/rust-lang/rustlings/commit/bec8e3a644cbd88db1c73ea5f1d8a364f4a34016))
|
* Updated iterators readme to account for iterators4 exercise (#273) ([bec8e3a](https://github.com/rust-lang/rustlings/commit/bec8e3a644cbd88db1c73ea5f1d8a364f4a34016))
|
||||||
- **installation:** make fatal errors more obvious (#272) ([17d0951e](https://github.com/rust-lang/rustlings/commit/17d0951e66fda8e11b204d5c4c41a0d5e22e78f7))
|
* **installation:** make fatal errors more obvious (#272) ([17d0951e](https://github.com/rust-lang/rustlings/commit/17d0951e66fda8e11b204d5c4c41a0d5e22e78f7))
|
||||||
- **iterators2:**
|
* **iterators2:**
|
||||||
- Remove reference to missing iterators2.rs (#245) ([419f7797](https://github.com/rust-lang/rustlings/commit/419f7797f294e4ce6a2b883199731b5bde77d262))
|
* Remove reference to missing iterators2.rs (#245) ([419f7797](https://github.com/rust-lang/rustlings/commit/419f7797f294e4ce6a2b883199731b5bde77d262))
|
||||||
- **as_ref_mut:** Enable a test and improve per clippy's suggestion (#256) ([dfdf809](https://github.com/rust-lang/rustlings/commit/dfdf8093ebbd4145864995627b812780de52f902))
|
* **as_ref_mut:** Enable a test and improve per clippy's suggestion (#256) ([dfdf809](https://github.com/rust-lang/rustlings/commit/dfdf8093ebbd4145864995627b812780de52f902))
|
||||||
- **tests1:**
|
* **tests1:**
|
||||||
- Change test command ([fe10e06c](https://github.com/rust-lang/rustlings/commit/fe10e06c3733ddb4a21e90d09bf79bfe618e97ce)
|
* Change test command ([fe10e06c](https://github.com/rust-lang/rustlings/commit/fe10e06c3733ddb4a21e90d09bf79bfe618e97ce)
|
||||||
- Correct test command in tests1.rs comment (#263) ([39fa7ae](https://github.com/rust-lang/rustlings/commit/39fa7ae8b70ad468da49b06f11b2383135a63bcf))
|
* Correct test command in tests1.rs comment (#263) ([39fa7ae](https://github.com/rust-lang/rustlings/commit/39fa7ae8b70ad468da49b06f11b2383135a63bcf))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Add variables5.rs exercise (#264) ([0c73609e](https://github.com/rust-lang/rustlings/commit/0c73609e6f2311295e95d6f96f8c747cfc4cba03))
|
* Add variables5.rs exercise (#264) ([0c73609e](https://github.com/rust-lang/rustlings/commit/0c73609e6f2311295e95d6f96f8c747cfc4cba03))
|
||||||
- Show a completion message when watching (#253) ([d25ee55a](https://github.com/rust-lang/rustlings/commit/d25ee55a3205882d35782e370af855051b39c58c))
|
* Show a completion message when watching (#253) ([d25ee55a](https://github.com/rust-lang/rustlings/commit/d25ee55a3205882d35782e370af855051b39c58c))
|
||||||
- Add type conversion and parsing exercises (#249) ([0c85dc11](https://github.com/rust-lang/rustlings/commit/0c85dc1193978b5165491b99cc4922caf8d14a65))
|
* Add type conversion and parsing exercises (#249) ([0c85dc11](https://github.com/rust-lang/rustlings/commit/0c85dc1193978b5165491b99cc4922caf8d14a65))
|
||||||
- Created consistent money unit (#258) ([fd57f8f](https://github.com/rust-lang/rustlings/commit/fd57f8f2c1da2af8ddbebbccec214e6f40f4dbab))
|
* Created consistent money unit (#258) ([fd57f8f](https://github.com/rust-lang/rustlings/commit/fd57f8f2c1da2af8ddbebbccec214e6f40f4dbab))
|
||||||
- Enable test for exercise test4 (#276) ([8b971ff](https://github.com/rust-lang/rustlings/commit/8b971ffab6079a706ac925f5917f987932b55c07))
|
* Enable test for exercise test4 (#276) ([8b971ff](https://github.com/rust-lang/rustlings/commit/8b971ffab6079a706ac925f5917f987932b55c07))
|
||||||
- Added traits exercises (#274 but specifically #216, which originally added
|
* Added traits exercises (#274 but specifically #216, which originally added
|
||||||
this :heart:) ([b559cdd](https://github.com/rust-lang/rustlings/commit/b559cdd73f32c0d0cfc1feda39f82b3e3583df17))
|
this :heart:) ([b559cdd](https://github.com/rust-lang/rustlings/commit/b559cdd73f32c0d0cfc1feda39f82b3e3583df17))
|
||||||
|
|
||||||
|
|
||||||
<a name="2.1.0"></a>
|
<a name="2.1.0"></a>
|
||||||
|
|
||||||
## 2.1.0 (2019-11-27)
|
## 2.1.0 (2019-11-27)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- add line numbers in several exercises and hints ([b565c4d3](https://github.com/rust-lang/rustlings/commit/b565c4d3e74e8e110bef201a082fa1302722a7c3))
|
* add line numbers in several exercises and hints ([b565c4d3](https://github.com/rust-lang/rustlings/commit/b565c4d3e74e8e110bef201a082fa1302722a7c3))
|
||||||
- **arc1:** Fix some words in the comment ([c42c3b21](https://github.com/rust-lang/rustlings/commit/c42c3b2101df9164c8cd7bb344def921e5ba3e61))
|
* **arc1:** Fix some words in the comment ([c42c3b21](https://github.com/rust-lang/rustlings/commit/c42c3b2101df9164c8cd7bb344def921e5ba3e61))
|
||||||
- **enums:** Add link to chapter on pattern syntax (#242) ([615ce327](https://github.com/rust-lang/rustlings/commit/615ce3279800c56d89f19d218ccb7ef576624feb))
|
* **enums:** Add link to chapter on pattern syntax (#242) ([615ce327](https://github.com/rust-lang/rustlings/commit/615ce3279800c56d89f19d218ccb7ef576624feb))
|
||||||
- **primitive_types4:**
|
* **primitive_types4:**
|
||||||
- update outdated hint ([4c5189df](https://github.com/rust-lang/rustlings/commit/4c5189df2bdd9a231f6b2611919ba5aa14da0d3f))
|
* update outdated hint ([4c5189df](https://github.com/rust-lang/rustlings/commit/4c5189df2bdd9a231f6b2611919ba5aa14da0d3f))
|
||||||
- update outdated comment ([ded2c034](https://github.com/rust-lang/rustlings/commit/ded2c034ba93fa1e3c2c2ea16b83abc1a57265e8))
|
* update outdated comment ([ded2c034](https://github.com/rust-lang/rustlings/commit/ded2c034ba93fa1e3c2c2ea16b83abc1a57265e8))
|
||||||
- **strings2:** update line number in hint ([a09f684f](https://github.com/rust-lang/rustlings/commit/a09f684f05c58d239a6fc59ec5f81c2533e8b820))
|
* **strings2:** update line number in hint ([a09f684f](https://github.com/rust-lang/rustlings/commit/a09f684f05c58d239a6fc59ec5f81c2533e8b820))
|
||||||
- **variables1:** Correct wrong word in comment ([fda5a470](https://github.com/rust-lang/rustlings/commit/fda5a47069e0954f16a04e8e50945e03becb71a5))
|
* **variables1:** Correct wrong word in comment ([fda5a470](https://github.com/rust-lang/rustlings/commit/fda5a47069e0954f16a04e8e50945e03becb71a5))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- **watch:** show hint while watching ([8143d57b](https://github.com/rust-lang/rustlings/commit/8143d57b4e88c51341dd4a18a14c536042cc009c))
|
* **watch:** show hint while watching ([8143d57b](https://github.com/rust-lang/rustlings/commit/8143d57b4e88c51341dd4a18a14c536042cc009c))
|
||||||
|
|
||||||
<a name="2.0.0"></a>
|
<a name="2.0.0"></a>
|
||||||
|
|
||||||
## 2.0.0 (2019-11-12)
|
## 2.0.0 (2019-11-12)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- **default:** Clarify the installation procedure ([c371b853](https://github.com/rust-lang/rustlings/commit/c371b853afa08947ddeebec0edd074b171eeaae0))
|
* **default:** Clarify the installation procedure ([c371b853](https://github.com/rust-lang/rustlings/commit/c371b853afa08947ddeebec0edd074b171eeaae0))
|
||||||
- **info:** Fix trailing newlines for hints ([795b6e34](https://github.com/rust-lang/rustlings/commit/795b6e348094a898e9227a14f6232f7bb94c8d31))
|
* **info:** Fix trailing newlines for hints ([795b6e34](https://github.com/rust-lang/rustlings/commit/795b6e348094a898e9227a14f6232f7bb94c8d31))
|
||||||
- **run:** make `run` never prompt ([4b265465](https://github.com/rust-lang/rustlings/commit/4b26546589f7d2b50455429482cf1f386ceae8b3))
|
* **run:** make `run` never prompt ([4b265465](https://github.com/rust-lang/rustlings/commit/4b26546589f7d2b50455429482cf1f386ceae8b3))
|
||||||
|
|
||||||
#### Breaking Changes
|
#### Breaking Changes
|
||||||
|
|
||||||
- Refactor hint system ([9bdb0a12](https://github.com/rust-lang/rustlings/commit/9bdb0a12e45a8e9f9f6a4bd4a9c172c5376c7f60))
|
* Refactor hint system ([9bdb0a12](https://github.com/rust-lang/rustlings/commit/9bdb0a12e45a8e9f9f6a4bd4a9c172c5376c7f60))
|
||||||
- improve `watch` execution mode ([2cdd6129](https://github.com/rust-lang/rustlings/commit/2cdd61294f0d9a53775ee24ad76435bec8a21e60))
|
* improve `watch` execution mode ([2cdd6129](https://github.com/rust-lang/rustlings/commit/2cdd61294f0d9a53775ee24ad76435bec8a21e60))
|
||||||
- Index exercises by name ([627cdc07](https://github.com/rust-lang/rustlings/commit/627cdc07d07dfe6a740e885e0ddf6900e7ec336b))
|
* Index exercises by name ([627cdc07](https://github.com/rust-lang/rustlings/commit/627cdc07d07dfe6a740e885e0ddf6900e7ec336b))
|
||||||
- **run:** makes `run` never prompt ([4b265465](https://github.com/rust-lang/rustlings/commit/4b26546589f7d2b50455429482cf1f386ceae8b3))
|
* **run:** makes `run` never prompt ([4b265465](https://github.com/rust-lang/rustlings/commit/4b26546589f7d2b50455429482cf1f386ceae8b3))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- **cli:** check for rustc before doing anything ([36a033b8](https://github.com/rust-lang/rustlings/commit/36a033b87a6549c1e5639c908bf7381c84f4f425))
|
* **cli:** check for rustc before doing anything ([36a033b8](https://github.com/rust-lang/rustlings/commit/36a033b87a6549c1e5639c908bf7381c84f4f425))
|
||||||
- **hint:** Add test for hint ([ce9fa6eb](https://github.com/rust-lang/rustlings/commit/ce9fa6ebbfdc3e7585d488d9409797285708316f))
|
* **hint:** Add test for hint ([ce9fa6eb](https://github.com/rust-lang/rustlings/commit/ce9fa6ebbfdc3e7585d488d9409797285708316f))
|
||||||
|
|
||||||
<a name="1.5.1"></a>
|
<a name="1.5.1"></a>
|
||||||
|
|
||||||
### 1.5.1 (2019-11-11)
|
### 1.5.1 (2019-11-11)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- **errors3:** Update hint ([dcfb427b](https://github.com/rust-lang/rustlings/commit/dcfb427b09585f0193f0a294443fdf99f11c64cb), closes [#185](https://github.com/rust-lang/rustlings/issues/185))
|
* **errors3:** Update hint ([dcfb427b](https://github.com/rust-lang/rustlings/commit/dcfb427b09585f0193f0a294443fdf99f11c64cb), closes [#185](https://github.com/rust-lang/rustlings/issues/185))
|
||||||
- **if1:** Remove `return` reference ([ad03d180](https://github.com/rust-lang/rustlings/commit/ad03d180c9311c0093e56a3531eec1a9a70cdb45))
|
* **if1:** Remove `return` reference ([ad03d180](https://github.com/rust-lang/rustlings/commit/ad03d180c9311c0093e56a3531eec1a9a70cdb45))
|
||||||
- **strings:** Move Strings before Structs ([6dcecb38](https://github.com/rust-lang/rustlings/commit/6dcecb38a4435593beb87c8e12d6314143631482), closes [#204](https://github.com/rust-lang/rustlings/issues/204))
|
* **strings:** Move Strings before Structs ([6dcecb38](https://github.com/rust-lang/rustlings/commit/6dcecb38a4435593beb87c8e12d6314143631482), closes [#204](https://github.com/rust-lang/rustlings/issues/204))
|
||||||
- **structs1:** Remove misleading comment ([f72e5a8f](https://github.com/rust-lang/rustlings/commit/f72e5a8f05568dde04eaeac10b9a69872f21cb37))
|
* **structs1:** Remove misleading comment ([f72e5a8f](https://github.com/rust-lang/rustlings/commit/f72e5a8f05568dde04eaeac10b9a69872f21cb37))
|
||||||
- **threads:** Move Threads behind SLT ([fbe91a67](https://github.com/rust-lang/rustlings/commit/fbe91a67a482bfe64cbcdd58d06ba830a0f39da3), closes [#205](https://github.com/rust-lang/rustlings/issues/205))
|
* **threads:** Move Threads behind SLT ([fbe91a67](https://github.com/rust-lang/rustlings/commit/fbe91a67a482bfe64cbcdd58d06ba830a0f39da3), closes [#205](https://github.com/rust-lang/rustlings/issues/205))
|
||||||
- **watch:** clear screen before each `verify()` ([3aff590](https://github.com/rust-lang/rustlings/commit/3aff59085586c24196a547c2693adbdcf4432648))
|
* **watch:** clear screen before each `verify()` ([3aff590](https://github.com/rust-lang/rustlings/commit/3aff59085586c24196a547c2693adbdcf4432648))
|
||||||
|
|
||||||
<a name="1.5.0"></a>
|
<a name="1.5.0"></a>
|
||||||
|
|
||||||
## 1.5.0 (2019-11-09)
|
## 1.5.0 (2019-11-09)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- **test1:** Rewrite logic ([79a56942](https://github.com/rust-lang/rustlings/commit/79a569422c8309cfc9e4aed25bf4ab3b3859996b))
|
* **test1:** Rewrite logic ([79a56942](https://github.com/rust-lang/rustlings/commit/79a569422c8309cfc9e4aed25bf4ab3b3859996b))
|
||||||
- **installation:** Fix rustlings installation check ([7a252c47](https://github.com/rust-lang/rustlings/commit/7a252c475551486efb52f949b8af55803b700bc6))
|
* **installation:** Fix rustlings installation check ([7a252c47](https://github.com/rust-lang/rustlings/commit/7a252c475551486efb52f949b8af55803b700bc6))
|
||||||
- **iterators:** Rename iterator3.rs ([433d2115](https://github.com/rust-lang/rustlings/commit/433d2115bc1c04b6d34a335a18c9a8f3e2672bc6))
|
* **iterators:** Rename iterator3.rs ([433d2115](https://github.com/rust-lang/rustlings/commit/433d2115bc1c04b6d34a335a18c9a8f3e2672bc6))
|
||||||
- **iterators2:** Remove syntax resulting in misleading error message ([4cde8664](https://github.com/rust-lang/rustlings/commit/4cde86643e12db162a66e62f23b78962986046ac))
|
* **iterators2:** Remove syntax resulting in misleading error message ([4cde8664](https://github.com/rust-lang/rustlings/commit/4cde86643e12db162a66e62f23b78962986046ac))
|
||||||
- **option1:**
|
* **option1:**
|
||||||
- Fix arguments passed to assert! macro (#222) ([4c2cf6da](https://github.com/rust-lang/rustlings/commit/4c2cf6da755efe02725e05ecc3a303304c10a6da))
|
* Fix arguments passed to assert! macro (#222) ([4c2cf6da](https://github.com/rust-lang/rustlings/commit/4c2cf6da755efe02725e05ecc3a303304c10a6da))
|
||||||
- Fix arguments passed to assert! macro ([ead4f7af](https://github.com/rust-lang/rustlings/commit/ead4f7af9e10e53418efdde5c359159347282afd))
|
* Fix arguments passed to assert! macro ([ead4f7af](https://github.com/rust-lang/rustlings/commit/ead4f7af9e10e53418efdde5c359159347282afd))
|
||||||
- Add test for prematurely passing exercise ([a750e4a1](https://github.com/rust-lang/rustlings/commit/a750e4a1a3006227292bb17d57d78ce84da6bfc6))
|
* Add test for prematurely passing exercise ([a750e4a1](https://github.com/rust-lang/rustlings/commit/a750e4a1a3006227292bb17d57d78ce84da6bfc6))
|
||||||
- **primitive_types4:** Fail on a slice covering the wrong area ([5b1e673c](https://github.com/rust-lang/rustlings/commit/5b1e673cec1658afc4ebbbc800213847804facf5))
|
* **primitive_types4:** Fail on a slice covering the wrong area ([5b1e673c](https://github.com/rust-lang/rustlings/commit/5b1e673cec1658afc4ebbbc800213847804facf5))
|
||||||
- **readme:** http to https ([70946b85](https://github.com/rust-lang/rustlings/commit/70946b85e536e80e70ed9505cb650ca0a3a1fbb5))
|
* **readme:** http to https ([70946b85](https://github.com/rust-lang/rustlings/commit/70946b85e536e80e70ed9505cb650ca0a3a1fbb5))
|
||||||
- **test1:**
|
* **test1:**
|
||||||
- Swap assertion parameter order ([4086d463](https://github.com/rust-lang/rustlings/commit/4086d463a981e81d97781851d17db2ced290f446))
|
* Swap assertion parameter order ([4086d463](https://github.com/rust-lang/rustlings/commit/4086d463a981e81d97781851d17db2ced290f446))
|
||||||
- renamed function name to snake case closes #180 ([89d5186c](https://github.com/rust-lang/rustlings/commit/89d5186c0dae8135ecabf90ee8bb35949bc2d29b))
|
* renamed function name to snake case closes #180 ([89d5186c](https://github.com/rust-lang/rustlings/commit/89d5186c0dae8135ecabf90ee8bb35949bc2d29b))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- Add enums exercises ([dc150321](https://github.com/rust-lang/rustlings/commit/dc15032112fc485226a573a18139e5ce928b1755))
|
* Add enums exercises ([dc150321](https://github.com/rust-lang/rustlings/commit/dc15032112fc485226a573a18139e5ce928b1755))
|
||||||
- Added exercise for struct update syntax ([1c4c8764](https://github.com/rust-lang/rustlings/commit/1c4c8764ed118740cd4cee73272ddc6cceb9d959))
|
* Added exercise for struct update syntax ([1c4c8764](https://github.com/rust-lang/rustlings/commit/1c4c8764ed118740cd4cee73272ddc6cceb9d959))
|
||||||
- **iterators2:** adds iterators2 exercise including config ([9288fccf](https://github.com/rust-lang/rustlings/commit/9288fccf07a2c5043b76d0fd6491e4cf72d76031))
|
* **iterators2:** adds iterators2 exercise including config ([9288fccf](https://github.com/rust-lang/rustlings/commit/9288fccf07a2c5043b76d0fd6491e4cf72d76031))
|
||||||
|
|
||||||
<a name="1.4.1"></a>
|
<a name="1.4.1"></a>
|
||||||
|
|
||||||
### 1.4.1 (2019-08-13)
|
### 1.4.1 (2019-08-13)
|
||||||
|
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- **iterators2:** Remove syntax resulting in misleading error message ([4cde8664](https://github.com/rust-lang/rustlings/commit/4cde86643e12db162a66e62f23b78962986046ac))
|
* **iterators2:** Remove syntax resulting in misleading error message ([4cde8664](https://github.com/rust-lang/rustlings/commit/4cde86643e12db162a66e62f23b78962986046ac))
|
||||||
- **option1:** Add test for prematurely passing exercise ([a750e4a1](https://github.com/rust-lang/rustlings/commit/a750e4a1a3006227292bb17d57d78ce84da6bfc6))
|
* **option1:** Add test for prematurely passing exercise ([a750e4a1](https://github.com/rust-lang/rustlings/commit/a750e4a1a3006227292bb17d57d78ce84da6bfc6))
|
||||||
- **test1:** Swap assertion parameter order ([4086d463](https://github.com/rust-lang/rustlings/commit/4086d463a981e81d97781851d17db2ced290f446))
|
* **test1:** Swap assertion parameter order ([4086d463](https://github.com/rust-lang/rustlings/commit/4086d463a981e81d97781851d17db2ced290f446))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="1.4.0"></a>
|
<a name="1.4.0"></a>
|
||||||
|
|
||||||
## 1.4.0 (2019-07-13)
|
## 1.4.0 (2019-07-13)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
- **installation:** Fix rustlings installation check ([7a252c47](https://github.com/rust-lang/rustlings/commit/7a252c475551486efb52f949b8af55803b700bc6))
|
* **installation:** Fix rustlings installation check ([7a252c47](https://github.com/rust-lang/rustlings/commit/7a252c475551486efb52f949b8af55803b700bc6))
|
||||||
- **iterators:** Rename iterator3.rs ([433d2115](https://github.com/rust-lang/rustlings/commit/433d2115bc1c04b6d34a335a18c9a8f3e2672bc6))
|
* **iterators:** Rename iterator3.rs ([433d2115](https://github.com/rust-lang/rustlings/commit/433d2115bc1c04b6d34a335a18c9a8f3e2672bc6))
|
||||||
- **readme:** http to https ([70946b85](https://github.com/rust-lang/rustlings/commit/70946b85e536e80e70ed9505cb650ca0a3a1fbb5))
|
* **readme:** http to https ([70946b85](https://github.com/rust-lang/rustlings/commit/70946b85e536e80e70ed9505cb650ca0a3a1fbb5))
|
||||||
- **test1:** renamed function name to snake case ([89d5186c](https://github.com/rust-lang/rustlings/commit/89d5186c0dae8135ecabf90ee8bb35949bc2d29b))
|
* **test1:** renamed function name to snake case ([89d5186c](https://github.com/rust-lang/rustlings/commit/89d5186c0dae8135ecabf90ee8bb35949bc2d29b))
|
||||||
- **cli:** Check if changed exercise file exists before calling verify ([ba85ca3](https://github.com/rust-lang/rustlings/commit/ba85ca32c4cfc61de46851ab89f9c58a28f33c88))
|
* **cli:** Check if changed exercise file exists before calling verify ([ba85ca3](https://github.com/rust-lang/rustlings/commit/ba85ca32c4cfc61de46851ab89f9c58a28f33c88))
|
||||||
- **structs1:** Fix the irrefutable let pattern warning ([cc6a141](https://github.com/rust-lang/rustlings/commit/cc6a14104d7c034eadc98297eaaa972d09c50b1f))
|
* **structs1:** Fix the irrefutable let pattern warning ([cc6a141](https://github.com/rust-lang/rustlings/commit/cc6a14104d7c034eadc98297eaaa972d09c50b1f))
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
- **changelog:** Use clog for changelogs ([34e31232](https://github.com/rust-lang/rustlings/commit/34e31232dfddde284a341c9609b33cd27d9d5724))
|
* **changelog:** Use clog for changelogs ([34e31232](https://github.com/rust-lang/rustlings/commit/34e31232dfddde284a341c9609b33cd27d9d5724))
|
||||||
- **iterators2:** adds iterators2 exercise including config ([9288fccf](https://github.com/rust-lang/rustlings/commit/9288fccf07a2c5043b76d0fd6491e4cf72d76031))
|
* **iterators2:** adds iterators2 exercise including config ([9288fccf](https://github.com/rust-lang/rustlings/commit/9288fccf07a2c5043b76d0fd6491e4cf72d76031))
|
||||||
|
|
||||||
<a name="1.3.0"></a>
|
<a name="1.3.0"></a>
|
||||||
|
|
||||||
### 1.3.0 (2019-06-05)
|
### 1.3.0 (2019-06-05)
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
@ -806,7 +652,6 @@
|
||||||
- Remove highlighting and syntect (#167, @komaeda)
|
- Remove highlighting and syntect (#167, @komaeda)
|
||||||
|
|
||||||
<a name="1.2.2"></a>
|
<a name="1.2.2"></a>
|
||||||
|
|
||||||
### 1.2.2 (2019-05-07)
|
### 1.2.2 (2019-05-07)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
@ -814,7 +659,6 @@
|
||||||
- Reverted `--nocapture` flag since it was causing tests to pass unconditionally
|
- Reverted `--nocapture` flag since it was causing tests to pass unconditionally
|
||||||
|
|
||||||
<a name="1.2.1"></a>
|
<a name="1.2.1"></a>
|
||||||
|
|
||||||
### 1.2.1 (2019-04-22)
|
### 1.2.1 (2019-04-22)
|
||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
@ -823,7 +667,6 @@
|
||||||
- Provide a nicer error message for when you're in the wrong directory
|
- Provide a nicer error message for when you're in the wrong directory
|
||||||
|
|
||||||
<a name="1.2.0"></a>
|
<a name="1.2.0"></a>
|
||||||
|
|
||||||
### 1.2.0 (2019-04-22)
|
### 1.2.0 (2019-04-22)
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
@ -832,7 +675,6 @@
|
||||||
- Use --nocapture when testing, enabling `println!` when running (@komaeda)
|
- Use --nocapture when testing, enabling `println!` when running (@komaeda)
|
||||||
|
|
||||||
<a name="1.1.1"></a>
|
<a name="1.1.1"></a>
|
||||||
|
|
||||||
### 1.1.1 (2019-04-14)
|
### 1.1.1 (2019-04-14)
|
||||||
|
|
||||||
#### Bug fixes
|
#### Bug fixes
|
||||||
|
@ -846,7 +688,6 @@
|
||||||
- Canonicalize paths to fix path matching (@cjpearce, #143)
|
- Canonicalize paths to fix path matching (@cjpearce, #143)
|
||||||
|
|
||||||
<a name="1.1.0"></a>
|
<a name="1.1.0"></a>
|
||||||
|
|
||||||
### 1.1.0 (2019-03-20)
|
### 1.1.0 (2019-03-20)
|
||||||
|
|
||||||
- errors2.rs: update link to Rust book (#124)
|
- errors2.rs: update link to Rust book (#124)
|
||||||
|
@ -857,7 +698,6 @@
|
||||||
- Verify that rust version is recent enough to install Rustlings (#131)
|
- Verify that rust version is recent enough to install Rustlings (#131)
|
||||||
|
|
||||||
<a name="1.0.1"></a>
|
<a name="1.0.1"></a>
|
||||||
|
|
||||||
### 1.0.1 (2019-03-06)
|
### 1.0.1 (2019-03-06)
|
||||||
|
|
||||||
- Adds a way to install Rustlings in one command (`curl -L https://git.io/rustlings | bash`)
|
- Adds a way to install Rustlings in one command (`curl -L https://git.io/rustlings | bash`)
|
||||||
|
@ -865,7 +705,6 @@
|
||||||
- Reworks the exercise management to use an external TOML file instead of just listing them in the code
|
- Reworks the exercise management to use an external TOML file instead of just listing them in the code
|
||||||
|
|
||||||
<a name="1.0.0"></a>
|
<a name="1.0.0"></a>
|
||||||
|
|
||||||
### 1.0.0 (2019-03-06)
|
### 1.0.0 (2019-03-06)
|
||||||
|
|
||||||
Initial release.
|
Initial release.
|
||||||
|
|
|
@ -4,81 +4,59 @@ version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aho-corasick"
|
name = "aho-corasick"
|
||||||
version = "0.7.20"
|
version = "0.7.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
|
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstream"
|
name = "argh"
|
||||||
version = "0.5.0"
|
version = "0.1.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
|
checksum = "2e7317a549bc17c5278d9e72bb6e62c6aa801ac2567048e39ebc1c194249323e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstyle",
|
"argh_derive",
|
||||||
"anstyle-parse",
|
"argh_shared",
|
||||||
"anstyle-query",
|
|
||||||
"anstyle-wincon",
|
|
||||||
"colorchoice",
|
|
||||||
"utf8parse",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstyle"
|
name = "argh_derive"
|
||||||
version = "1.0.3"
|
version = "0.1.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46"
|
checksum = "60949c42375351e9442e354434b0cba2ac402c1237edf673cac3a4bf983b8d3c"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "anstyle-parse"
|
|
||||||
version = "0.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"utf8parse",
|
"argh_shared",
|
||||||
|
"heck",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstyle-query"
|
name = "argh_shared"
|
||||||
version = "1.0.0"
|
version = "0.1.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
|
checksum = "8a61eb019cb8f415d162cb9f12130ee6bbe9168b7d953c17f4ad049e4051ca00"
|
||||||
dependencies = [
|
|
||||||
"windows-sys 0.48.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "anstyle-wincon"
|
|
||||||
version = "2.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
|
|
||||||
dependencies = [
|
|
||||||
"anstyle",
|
|
||||||
"windows-sys 0.48.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "assert_cmd"
|
name = "assert_cmd"
|
||||||
version = "2.0.12"
|
version = "0.11.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
|
checksum = "2dc477793bd82ec39799b6f6b3df64938532fdf2ab0d49ef817eac65856a5a1e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstyle",
|
"escargot",
|
||||||
"bstr",
|
|
||||||
"doc-comment",
|
|
||||||
"predicates",
|
"predicates",
|
||||||
"predicates-core",
|
"predicates-core",
|
||||||
"predicates-tree",
|
"predicates-tree",
|
||||||
"wait-timeout",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.1.0"
|
version = "1.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
|
@ -86,17 +64,6 @@ version = "1.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bstr"
|
|
||||||
version = "1.6.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a"
|
|
||||||
dependencies = [
|
|
||||||
"memchr",
|
|
||||||
"regex-automata",
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "0.1.10"
|
version = "0.1.10"
|
||||||
|
@ -109,82 +76,26 @@ version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap"
|
|
||||||
version = "4.4.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "84ed82781cea27b43c9b106a979fe450a13a31aab0500595fb3fc06616de08e6"
|
|
||||||
dependencies = [
|
|
||||||
"clap_builder",
|
|
||||||
"clap_derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap_builder"
|
|
||||||
version = "4.4.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08"
|
|
||||||
dependencies = [
|
|
||||||
"anstream",
|
|
||||||
"anstyle",
|
|
||||||
"clap_lex",
|
|
||||||
"strsim",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap_derive"
|
|
||||||
version = "4.4.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
|
|
||||||
dependencies = [
|
|
||||||
"heck",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap_lex"
|
|
||||||
version = "0.5.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "colorchoice"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "console"
|
name = "console"
|
||||||
version = "0.15.5"
|
version = "0.15.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
|
checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"encode_unicode",
|
"encode_unicode",
|
||||||
"lazy_static",
|
|
||||||
"libc",
|
"libc",
|
||||||
|
"once_cell",
|
||||||
|
"regex",
|
||||||
|
"terminal_size",
|
||||||
"unicode-width",
|
"unicode-width",
|
||||||
"windows-sys 0.42.0",
|
"winapi 0.3.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "difflib"
|
name = "difference"
|
||||||
version = "0.4.0"
|
version = "2.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
|
checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "doc-comment"
|
|
||||||
version = "0.3.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "either"
|
|
||||||
version = "1.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "encode_unicode"
|
name = "encode_unicode"
|
||||||
|
@ -193,28 +104,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "equivalent"
|
name = "escargot"
|
||||||
version = "1.0.1"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
checksum = "ceb9adbf9874d5d028b5e4c5739d22b71988252b25c9c98fe7cf9738bee84597"
|
||||||
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
|
"log",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "filetime"
|
name = "filetime"
|
||||||
version = "0.2.20"
|
version = "0.2.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
|
checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"libc",
|
"libc",
|
||||||
"redox_syscall",
|
"redox_syscall",
|
||||||
"windows-sys 0.45.0",
|
"winapi 0.3.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "float-cmp"
|
name = "float-cmp"
|
||||||
version = "0.9.0"
|
version = "0.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
|
checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-traits",
|
"num-traits",
|
||||||
]
|
]
|
||||||
|
@ -256,52 +173,38 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glob"
|
name = "glob"
|
||||||
version = "0.3.1"
|
version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hashbrown"
|
|
||||||
version = "0.14.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "heck"
|
||||||
version = "0.4.1"
|
version = "0.3.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-segmentation",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "home"
|
name = "home"
|
||||||
version = "0.5.4"
|
version = "0.5.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408"
|
checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"winapi 0.3.9",
|
"winapi 0.3.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "indexmap"
|
|
||||||
version = "2.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
|
|
||||||
dependencies = [
|
|
||||||
"equivalent",
|
|
||||||
"hashbrown",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indicatif"
|
name = "indicatif"
|
||||||
version = "0.17.6"
|
version = "0.16.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730"
|
checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console",
|
"console",
|
||||||
"instant",
|
"lazy_static",
|
||||||
"number_prefix",
|
"number_prefix",
|
||||||
"portable-atomic",
|
"regex",
|
||||||
"unicode-width",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -324,15 +227,6 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "instant"
|
|
||||||
version = "0.1.12"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if 1.0.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iovec"
|
name = "iovec"
|
||||||
version = "0.1.4"
|
version = "0.1.4"
|
||||||
|
@ -342,20 +236,11 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "itertools"
|
|
||||||
version = "0.10.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
|
|
||||||
dependencies = [
|
|
||||||
"either",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.6"
|
version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
|
checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kernel32-sys"
|
name = "kernel32-sys"
|
||||||
|
@ -381,24 +266,24 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.140"
|
version = "0.2.100"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
|
checksum = "a1fa8cddc8fbbee11227ef194b5317ed014b8acbf15139bd716a18ad3fe99ec5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.17"
|
version = "0.4.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
|
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.6.3"
|
version = "2.4.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
|
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mio"
|
name = "mio"
|
||||||
|
@ -445,9 +330,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "net2"
|
name = "net2"
|
||||||
version = "0.2.38"
|
version = "0.2.37"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
|
checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 0.1.10",
|
"cfg-if 0.1.10",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -480,9 +365,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.2.15"
|
version = "0.2.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
@ -494,21 +379,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
|
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "portable-atomic"
|
name = "once_cell"
|
||||||
version = "1.4.3"
|
version = "1.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b"
|
checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "predicates"
|
name = "predicates"
|
||||||
version = "3.0.3"
|
version = "1.0.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
|
checksum = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstyle",
|
"difference",
|
||||||
"difflib",
|
|
||||||
"float-cmp",
|
"float-cmp",
|
||||||
"itertools",
|
|
||||||
"normalize-line-endings",
|
"normalize-line-endings",
|
||||||
"predicates-core",
|
"predicates-core",
|
||||||
"regex",
|
"regex",
|
||||||
|
@ -516,76 +399,70 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "predicates-core"
|
name = "predicates-core"
|
||||||
version = "1.0.6"
|
version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
|
checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "predicates-tree"
|
name = "predicates-tree"
|
||||||
version = "1.0.9"
|
version = "1.0.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
|
checksum = "d7dd0fd014130206c9352efbdc92be592751b2b9274dff685348341082c6ea3d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"predicates-core",
|
"predicates-core",
|
||||||
"termtree",
|
"treeline",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.53"
|
version = "1.0.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73"
|
checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-xid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.26"
|
version = "1.0.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
|
checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.2.16"
|
version = "0.2.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
|
checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.7.2"
|
version = "1.5.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c"
|
checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"memchr",
|
"memchr",
|
||||||
"regex-syntax",
|
"regex-syntax",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "regex-automata"
|
|
||||||
version = "0.3.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-syntax"
|
name = "regex-syntax"
|
||||||
version = "0.6.29"
|
version = "0.6.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
|
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustlings"
|
name = "rustlings"
|
||||||
version = "5.6.1"
|
version = "5.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"argh",
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
"clap",
|
|
||||||
"console",
|
"console",
|
||||||
"glob",
|
"glob",
|
||||||
"home",
|
"home",
|
||||||
|
@ -600,9 +477,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.13"
|
version = "1.0.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
|
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "same-file"
|
name = "same-file"
|
||||||
|
@ -615,18 +492,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.158"
|
version = "1.0.129"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9"
|
checksum = "d1f72836d2aa753853178eda473a3b9d8e4eefdaf20523b919677e6de489f8f1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.158"
|
version = "1.0.129"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad"
|
checksum = "e57ae87ad533d9a56427558b516d0adac283614e347abf85b0dc0cbbf0a249f3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -635,124 +512,83 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.94"
|
version = "1.0.81"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
|
checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde_spanned"
|
|
||||||
version = "0.6.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
|
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "slab"
|
name = "slab"
|
||||||
version = "0.4.8"
|
version = "0.4.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
|
checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590"
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "strsim"
|
|
||||||
version = "0.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.8"
|
version = "1.0.75"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9"
|
checksum = "b7f58f7e8eaa0009c5fec437aabf511bd9933e4b2d7407bd05273c01a8906ea7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"unicode-ident",
|
"unicode-xid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "termtree"
|
name = "terminal_size"
|
||||||
version = "0.4.1"
|
version = "0.1.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
|
checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"winapi 0.3.9",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml"
|
name = "toml"
|
||||||
version = "0.7.8"
|
version = "0.5.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
|
checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
"serde_spanned",
|
|
||||||
"toml_datetime",
|
|
||||||
"toml_edit",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "toml_datetime"
|
|
||||||
version = "0.6.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_edit"
|
name = "treeline"
|
||||||
version = "0.19.15"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
|
checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41"
|
||||||
dependencies = [
|
|
||||||
"indexmap",
|
|
||||||
"serde",
|
|
||||||
"serde_spanned",
|
|
||||||
"toml_datetime",
|
|
||||||
"winnow",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-segmentation"
|
||||||
version = "1.0.8"
|
version = "1.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
|
checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-width"
|
name = "unicode-width"
|
||||||
version = "0.1.10"
|
version = "0.1.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
|
checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "utf8parse"
|
name = "unicode-xid"
|
||||||
version = "0.2.1"
|
version = "0.2.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
|
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wait-timeout"
|
|
||||||
version = "0.2.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "walkdir"
|
name = "walkdir"
|
||||||
version = "2.3.3"
|
version = "2.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
|
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"same-file",
|
"same-file",
|
||||||
|
"winapi 0.3.9",
|
||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -799,162 +635,6 @@ version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-sys"
|
|
||||||
version = "0.42.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
|
|
||||||
dependencies = [
|
|
||||||
"windows_aarch64_gnullvm 0.42.2",
|
|
||||||
"windows_aarch64_msvc 0.42.2",
|
|
||||||
"windows_i686_gnu 0.42.2",
|
|
||||||
"windows_i686_msvc 0.42.2",
|
|
||||||
"windows_x86_64_gnu 0.42.2",
|
|
||||||
"windows_x86_64_gnullvm 0.42.2",
|
|
||||||
"windows_x86_64_msvc 0.42.2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-sys"
|
|
||||||
version = "0.45.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
|
|
||||||
dependencies = [
|
|
||||||
"windows-targets 0.42.2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-sys"
|
|
||||||
version = "0.48.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
|
||||||
dependencies = [
|
|
||||||
"windows-targets 0.48.5",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-targets"
|
|
||||||
version = "0.42.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
|
|
||||||
dependencies = [
|
|
||||||
"windows_aarch64_gnullvm 0.42.2",
|
|
||||||
"windows_aarch64_msvc 0.42.2",
|
|
||||||
"windows_i686_gnu 0.42.2",
|
|
||||||
"windows_i686_msvc 0.42.2",
|
|
||||||
"windows_x86_64_gnu 0.42.2",
|
|
||||||
"windows_x86_64_gnullvm 0.42.2",
|
|
||||||
"windows_x86_64_msvc 0.42.2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-targets"
|
|
||||||
version = "0.48.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
|
||||||
dependencies = [
|
|
||||||
"windows_aarch64_gnullvm 0.48.5",
|
|
||||||
"windows_aarch64_msvc 0.48.5",
|
|
||||||
"windows_i686_gnu 0.48.5",
|
|
||||||
"windows_i686_msvc 0.48.5",
|
|
||||||
"windows_x86_64_gnu 0.48.5",
|
|
||||||
"windows_x86_64_gnullvm 0.48.5",
|
|
||||||
"windows_x86_64_msvc 0.48.5",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_gnullvm"
|
|
||||||
version = "0.42.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_gnullvm"
|
|
||||||
version = "0.48.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_msvc"
|
|
||||||
version = "0.42.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_msvc"
|
|
||||||
version = "0.48.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_gnu"
|
|
||||||
version = "0.42.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_gnu"
|
|
||||||
version = "0.48.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_msvc"
|
|
||||||
version = "0.42.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_msvc"
|
|
||||||
version = "0.48.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnu"
|
|
||||||
version = "0.42.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnu"
|
|
||||||
version = "0.48.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnullvm"
|
|
||||||
version = "0.42.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnullvm"
|
|
||||||
version = "0.48.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_msvc"
|
|
||||||
version = "0.42.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_msvc"
|
|
||||||
version = "0.48.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winnow"
|
|
||||||
version = "0.5.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
|
|
||||||
dependencies = [
|
|
||||||
"memchr",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ws2_32-sys"
|
name = "ws2_32-sys"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
|
|
13
Cargo.toml
13
Cargo.toml
|
@ -1,7 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "rustlings"
|
name = "rustlings"
|
||||||
description = "Small exercises to get you used to reading and writing Rust code!"
|
version = "5.3.0"
|
||||||
version = "5.6.1"
|
|
||||||
authors = [
|
authors = [
|
||||||
"Liv <mokou@fastmail.com>",
|
"Liv <mokou@fastmail.com>",
|
||||||
"Carol (Nichols || Goulding) <carol.nichols@gmail.com>",
|
"Carol (Nichols || Goulding) <carol.nichols@gmail.com>",
|
||||||
|
@ -9,22 +8,22 @@ authors = [
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
indicatif = "0.17.6"
|
argh = "0.1"
|
||||||
|
indicatif = "0.16"
|
||||||
console = "0.15"
|
console = "0.15"
|
||||||
notify = "4.0"
|
notify = "4.0"
|
||||||
toml = "0.7.6"
|
toml = "0.5"
|
||||||
regex = "1.5"
|
regex = "1.5"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0.81"
|
serde_json = "1.0.81"
|
||||||
home = "0.5.3"
|
home = "0.5.3"
|
||||||
glob = "0.3.0"
|
glob = "0.3.0"
|
||||||
clap = { version = "4.4.0", features = ["derive"] }
|
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "rustlings"
|
name = "rustlings"
|
||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
assert_cmd = "2.0.12"
|
assert_cmd = "0.11.0"
|
||||||
predicates = "3.0.3"
|
predicates = "1.0.1"
|
||||||
glob = "0.3.0"
|
glob = "0.3.0"
|
||||||
|
|
36
README.md
36
README.md
|
@ -1,9 +1,5 @@
|
||||||
<div class="oranda-hide">
|
|
||||||
|
|
||||||
# rustlings 🦀❤️
|
# rustlings 🦀❤️
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
Greetings and welcome to `rustlings`. This project contains small exercises to get you used to reading and writing Rust code. This includes reading and responding to compiler messages!
|
Greetings and welcome to `rustlings`. This project contains small exercises to get you used to reading and writing Rust code. This includes reading and responding to compiler messages!
|
||||||
|
|
||||||
_...looking for the old, web-based version of Rustlings? Try [here](https://github.com/rust-lang/rustlings/tree/rustlings-1)_
|
_...looking for the old, web-based version of Rustlings? Try [here](https://github.com/rust-lang/rustlings/tree/rustlings-1)_
|
||||||
|
@ -18,7 +14,7 @@ Alternatively, for a first-time Rust learner, there are several other resources:
|
||||||
_Note: If you're on MacOS, make sure you've installed Xcode and its developer tools by typing `xcode-select --install`._
|
_Note: If you're on MacOS, make sure you've installed Xcode and its developer tools by typing `xcode-select --install`._
|
||||||
_Note: If you're on Linux, make sure you've installed gcc. Deb: `sudo apt install gcc`. Yum: `sudo yum -y install gcc`._
|
_Note: If you're on Linux, make sure you've installed gcc. Deb: `sudo apt install gcc`. Yum: `sudo yum -y install gcc`._
|
||||||
|
|
||||||
You will need to have Rust installed. You can get it by visiting <https://rustup.rs>. This'll also install Cargo, Rust's package/project manager.
|
You will need to have Rust installed. You can get it by visiting https://rustup.rs. This'll also install Cargo, Rust's package/project manager.
|
||||||
|
|
||||||
## MacOS/Linux
|
## MacOS/Linux
|
||||||
|
|
||||||
|
@ -26,23 +22,18 @@ Just run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash
|
curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash
|
||||||
```
|
# Or if you want it to be installed to a different path:
|
||||||
|
|
||||||
Or if you want it to be installed to a different path:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash -s mypath/
|
curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash -s mypath/
|
||||||
```
|
```
|
||||||
|
|
||||||
This will install Rustlings and give you access to the `rustlings` command. Run it to get started!
|
This will install Rustlings and give you access to the `rustlings` command. Run it to get started!
|
||||||
|
|
||||||
### Nix
|
### Nix
|
||||||
|
|
||||||
Basically: Clone the repository at the latest tag, finally run `nix develop` or `nix-shell`.
|
Basically: Clone the repository at the latest tag, finally run `nix develop` or `nix-shell`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# find out the latest version at https://github.com/rust-lang/rustlings/releases/latest (on edit 5.6.1)
|
# find out the latest version at https://github.com/rust-lang/rustlings/releases/latest (on edit 5.3.0)
|
||||||
git clone -b 5.6.1 --depth 1 https://github.com/rust-lang/rustlings
|
git clone -b 5.3.0 --depth 1 https://github.com/rust-lang/rustlings
|
||||||
cd rustlings
|
cd rustlings
|
||||||
# if nix version > 2.3
|
# if nix version > 2.3
|
||||||
nix develop
|
nix develop
|
||||||
|
@ -70,17 +61,17 @@ If you get a permission denied message, you might have to exclude the directory
|
||||||
|
|
||||||
## Browser
|
## Browser
|
||||||
|
|
||||||
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/rust-lang/rustlings)
|
[Run on Repl.it](https://repl.it/github/rust-lang/rustlings)
|
||||||
|
|
||||||
[![Open Rustlings On Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/?repo=rust-lang%2Frustlings&ref=main)
|
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/rust-lang/rustlings)
|
||||||
|
|
||||||
## Manually
|
## Manually
|
||||||
|
|
||||||
Basically: Clone the repository at the latest tag, run `cargo install --path .`.
|
Basically: Clone the repository at the latest tag, run `cargo install --path .`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# find out the latest version at https://github.com/rust-lang/rustlings/releases/latest (on edit 5.6.1)
|
# find out the latest version at https://github.com/rust-lang/rustlings/releases/latest (on edit 5.3.0)
|
||||||
git clone -b 5.6.1 --depth 1 https://github.com/rust-lang/rustlings
|
git clone -b 5.3.0 --depth 1 https://github.com/rust-lang/rustlings
|
||||||
cd rustlings
|
cd rustlings
|
||||||
cargo install --force --path .
|
cargo install --force --path .
|
||||||
```
|
```
|
||||||
|
@ -163,7 +154,8 @@ for you:
|
||||||
rm -rf rustlings # or your custom folder name, if you chose and or renamed it
|
rm -rf rustlings # or your custom folder name, if you chose and or renamed it
|
||||||
```
|
```
|
||||||
|
|
||||||
Second, run `cargo uninstall` to remove the `rustlings` binary:
|
Second, since Rustlings got installed via `cargo install`, it's only reasonable to assume that you can also remove it using Cargo, and
|
||||||
|
exactly that is the case. Run `cargo uninstall` to remove the `rustlings` binary:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cargo uninstall rustlings
|
cargo uninstall rustlings
|
||||||
|
@ -173,8 +165,12 @@ Now you should be done!
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
See [CONTRIBUTING.md](https://github.com/rust-lang/rustlings/blob/main/CONTRIBUTING.md).
|
See [CONTRIBUTING.md](./CONTRIBUTING.md).
|
||||||
|
|
||||||
|
Development-focused discussion about Rustlings happens in the [**rustlings** stream](https://rust-lang.zulipchat.com/#narrow/stream/334454-rustlings)
|
||||||
|
on the [Rust Project Zulip](https://rust-lang.zulipchat.com). Feel free to start a new thread there
|
||||||
|
if you have ideas or suggestions!
|
||||||
|
|
||||||
## Contributors ✨
|
## Contributors ✨
|
||||||
|
|
||||||
Thanks goes to the wonderful people listed in [AUTHORS.md](https://github.com/rust-lang/rustlings/blob/main/AUTHORS.md) 🎉
|
Thanks goes to the wonderful people listed in [AUTHORS.md](./AUTHORS.md) 🎉
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
// clippy1.rs
|
// clippy1.rs
|
||||||
|
// The Clippy tool is a collection of lints to analyze your code
|
||||||
|
// so you can catch common mistakes and improve your Rust code.
|
||||||
//
|
//
|
||||||
// The Clippy tool is a collection of lints to analyze your code so you can
|
// For these exercises the code will fail to compile when there are clippy warnings
|
||||||
// catch common mistakes and improve your Rust code.
|
// check clippy's suggestions from the output to solve the exercise.
|
||||||
//
|
// Execute `rustlings hint clippy1` or use the `hint` watch subcommand for a hint.
|
||||||
// For these exercises the code will fail to compile when there are clippy
|
|
||||||
// warnings check clippy's suggestions from the output to solve the exercise.
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint clippy1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// clippy2.rs
|
// clippy2.rs
|
||||||
//
|
// Execute `rustlings hint clippy2` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint clippy2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// clippy3.rs
|
// clippy3.rs
|
||||||
//
|
|
||||||
// Here's a couple more easy Clippy fixes, so you can see its utility.
|
// Here's a couple more easy Clippy fixes, so you can see its utility.
|
||||||
// No hints.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ The simplest form of type conversion is a type cast expression. It is denoted wi
|
||||||
|
|
||||||
Rust also offers traits that facilitate type conversions upon implementation. These traits can be found under the [`convert`](https://doc.rust-lang.org/std/convert/index.html) module.
|
Rust also offers traits that facilitate type conversions upon implementation. These traits can be found under the [`convert`](https://doc.rust-lang.org/std/convert/index.html) module.
|
||||||
The traits are the following:
|
The traits are the following:
|
||||||
|
|
||||||
- `From` and `Into` covered in [`from_into`](from_into.rs)
|
- `From` and `Into` covered in [`from_into`](from_into.rs)
|
||||||
- `TryFrom` and `TryInto` covered in [`try_from_into`](try_from_into.rs)
|
- `TryFrom` and `TryInto` covered in [`try_from_into`](try_from_into.rs)
|
||||||
- `AsRef` and `AsMut` covered in [`as_ref_mut`](as_ref_mut.rs)
|
- `AsRef` and `AsMut` covered in [`as_ref_mut`](as_ref_mut.rs)
|
||||||
|
@ -18,6 +17,5 @@ These should be the main ways ***within the standard library*** to convert data
|
||||||
## Further information
|
## Further information
|
||||||
|
|
||||||
These are not directly covered in the book, but the standard library has a great documentation for it.
|
These are not directly covered in the book, but the standard library has a great documentation for it.
|
||||||
|
|
||||||
- [conversions](https://doc.rust-lang.org/std/convert/index.html)
|
- [conversions](https://doc.rust-lang.org/std/convert/index.html)
|
||||||
- [`FromStr` trait](https://doc.rust-lang.org/std/str/trait.FromStr.html)
|
- [`FromStr` trait](https://doc.rust-lang.org/std/str/trait.FromStr.html)
|
|
@ -1,11 +1,7 @@
|
||||||
// as_ref_mut.rs
|
// AsRef and AsMut allow for cheap reference-to-reference conversions.
|
||||||
//
|
// Read more about them at https://doc.rust-lang.org/std/convert/trait.AsRef.html
|
||||||
// AsRef and AsMut allow for cheap reference-to-reference conversions. Read more
|
// and https://doc.rust-lang.org/std/convert/trait.AsMut.html, respectively.
|
||||||
// about them at https://doc.rust-lang.org/std/convert/trait.AsRef.html and
|
// Execute `rustlings hint as_ref_mut` or use the `hint` watch subcommand for a hint.
|
||||||
// https://doc.rust-lang.org/std/convert/trait.AsMut.html, respectively.
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint as_ref_mut` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -57,7 +53,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn mut_box() {
|
fn mult_box() {
|
||||||
let mut num: Box<u32> = Box::new(3);
|
let mut num: Box<u32> = Box::new(3);
|
||||||
num_sq(&mut num);
|
num_sq(&mut num);
|
||||||
assert_eq!(*num, 9);
|
assert_eq!(*num, 9);
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
// from_into.rs
|
// The From trait is used for value-to-value conversions.
|
||||||
//
|
// If From is implemented correctly for a type, the Into trait should work conversely.
|
||||||
// The From trait is used for value-to-value conversions. If From is implemented
|
// You can read more about it at https://doc.rust-lang.org/std/convert/trait.From.html
|
||||||
// correctly for a type, the Into trait should work conversely. You can read
|
// Execute `rustlings hint from_into` or use the `hint` watch subcommand for a hint.
|
||||||
// more about it at https://doc.rust-lang.org/std/convert/trait.From.html
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint from_into` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct Person {
|
struct Person {
|
||||||
|
@ -24,21 +20,20 @@ impl Default for Person {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Your task is to complete this implementation in order for the line `let p =
|
// Your task is to complete this implementation
|
||||||
// Person::from("Mark,20")` to compile Please note that you'll need to parse the
|
// in order for the line `let p = Person::from("Mark,20")` to compile
|
||||||
// age component into a `usize` with something like `"4".parse::<usize>()`. The
|
// Please note that you'll need to parse the age component into a `usize`
|
||||||
// outcome of this needs to be handled appropriately.
|
// with something like `"4".parse::<usize>()`. The outcome of this needs to
|
||||||
|
// be handled appropriately.
|
||||||
//
|
//
|
||||||
// Steps:
|
// Steps:
|
||||||
// 1. If the length of the provided string is 0, then return the default of
|
// 1. If the length of the provided string is 0, then return the default of Person
|
||||||
// Person.
|
// 2. Split the given string on the commas present in it
|
||||||
// 2. Split the given string on the commas present in it.
|
// 3. Extract the first element from the split operation and use it as the name
|
||||||
// 3. Extract the first element from the split operation and use it as the name.
|
// 4. If the name is empty, then return the default of Person
|
||||||
// 4. If the name is empty, then return the default of Person.
|
// 5. Extract the other element from the split operation and parse it into a `usize` as the age
|
||||||
// 5. Extract the other element from the split operation and parse it into a
|
// If while parsing the age, something goes wrong, then return the default of Person
|
||||||
// `usize` as the age.
|
// Otherwise, then return an instantiated Person object with the results
|
||||||
// If while parsing the age, something goes wrong, then return the default of
|
|
||||||
// Person Otherwise, then return an instantiated Person object with the results
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -82,8 +77,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn test_bad_age() {
|
fn test_bad_age() {
|
||||||
// Test that "Mark,twenty" will return the default person due to an
|
// Test that "Mark,twenty" will return the default person due to an error in parsing age
|
||||||
// error in parsing age
|
|
||||||
let p = Person::from("Mark,twenty");
|
let p = Person::from("Mark,twenty");
|
||||||
assert_eq!(p.name, "John");
|
assert_eq!(p.name, "John");
|
||||||
assert_eq!(p.age, 30);
|
assert_eq!(p.age, 30);
|
||||||
|
@ -127,14 +121,14 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_trailing_comma() {
|
fn test_trailing_comma() {
|
||||||
let p: Person = Person::from("Mike,32,");
|
let p: Person = Person::from("Mike,32,");
|
||||||
assert_eq!(p.name, "Mike");
|
assert_eq!(p.name, "John");
|
||||||
assert_eq!(p.age, 32);
|
assert_eq!(p.age, 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_trailing_comma_and_some_string() {
|
fn test_trailing_comma_and_some_string() {
|
||||||
let p: Person = Person::from("Mike,32,man");
|
let p: Person = Person::from("Mike,32,man");
|
||||||
assert_eq!(p.name, "Mike");
|
assert_eq!(p.name, "John");
|
||||||
assert_eq!(p.age, 32);
|
assert_eq!(p.age, 30);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
// from_str.rs
|
// from_str.rs
|
||||||
//
|
// This is similar to from_into.rs, but this time we'll implement `FromStr`
|
||||||
// This is similar to from_into.rs, but this time we'll implement `FromStr` and
|
// and return errors instead of falling back to a default value.
|
||||||
// return errors instead of falling back to a default value. Additionally, upon
|
// Additionally, upon implementing FromStr, you can use the `parse` method
|
||||||
// implementing FromStr, you can use the `parse` method on strings to generate
|
// on strings to generate an object of the implementor type.
|
||||||
// an object of the implementor type. You can read more about it at
|
// You can read more about it at https://doc.rust-lang.org/std/str/trait.FromStr.html
|
||||||
// https://doc.rust-lang.org/std/str/trait.FromStr.html
|
// Execute `rustlings hint from_str` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint from_str` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
use std::num::ParseIntError;
|
use std::num::ParseIntError;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
@ -36,18 +33,15 @@ enum ParsePersonError {
|
||||||
// Steps:
|
// Steps:
|
||||||
// 1. If the length of the provided string is 0, an error should be returned
|
// 1. If the length of the provided string is 0, an error should be returned
|
||||||
// 2. Split the given string on the commas present in it
|
// 2. Split the given string on the commas present in it
|
||||||
// 3. Only 2 elements should be returned from the split, otherwise return an
|
// 3. Only 2 elements should be returned from the split, otherwise return an error
|
||||||
// error
|
|
||||||
// 4. Extract the first element from the split operation and use it as the name
|
// 4. Extract the first element from the split operation and use it as the name
|
||||||
// 5. Extract the other element from the split operation and parse it into a
|
// 5. Extract the other element from the split operation and parse it into a `usize` as the age
|
||||||
// `usize` as the age with something like `"4".parse::<usize>()`
|
// with something like `"4".parse::<usize>()`
|
||||||
// 6. If while extracting the name and the age something goes wrong, an error
|
// 6. If while extracting the name and the age something goes wrong, an error should be returned
|
||||||
// should be returned
|
|
||||||
// If everything goes well, then return a Result of a Person object
|
// If everything goes well, then return a Result of a Person object
|
||||||
//
|
//
|
||||||
// As an aside: `Box<dyn Error>` implements `From<&'_ str>`. This means that if
|
// As an aside: `Box<dyn Error>` implements `From<&'_ str>`. This means that if you want to return a
|
||||||
// you want to return a string error message, you can do so via just using
|
// string error message, you can do so via just using return `Err("my error message".into())`.
|
||||||
// return `Err("my error message".into())`.
|
|
||||||
|
|
||||||
impl FromStr for Person {
|
impl FromStr for Person {
|
||||||
type Err = ParsePersonError;
|
type Err = ParsePersonError;
|
||||||
|
|
|
@ -1,13 +1,9 @@
|
||||||
// try_from_into.rs
|
// try_from_into.rs
|
||||||
//
|
// TryFrom is a simple and safe type conversion that may fail in a controlled way under some circumstances.
|
||||||
// TryFrom is a simple and safe type conversion that may fail in a controlled
|
// Basically, this is the same as From. The main difference is that this should return a Result type
|
||||||
// way under some circumstances. Basically, this is the same as From. The main
|
// instead of the target type itself.
|
||||||
// difference is that this should return a Result type instead of the target
|
// You can read more about it at https://doc.rust-lang.org/std/convert/trait.TryFrom.html
|
||||||
// type itself. You can read more about it at
|
// Execute `rustlings hint try_from_into` or use the `hint` watch subcommand for a hint.
|
||||||
// https://doc.rust-lang.org/std/convert/trait.TryFrom.html
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint try_from_into` or use the `hint` watch subcommand for
|
|
||||||
// a hint.
|
|
||||||
|
|
||||||
use std::convert::{TryFrom, TryInto};
|
use std::convert::{TryFrom, TryInto};
|
||||||
|
|
||||||
|
@ -29,13 +25,14 @@ enum IntoColorError {
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
// Your task is to complete this implementation and return an Ok result of inner
|
// Your task is to complete this implementation
|
||||||
// type Color. You need to create an implementation for a tuple of three
|
// and return an Ok result of inner type Color.
|
||||||
// integers, an array of three integers, and a slice of integers.
|
// You need to create an implementation for a tuple of three integers,
|
||||||
|
// an array of three integers, and a slice of integers.
|
||||||
//
|
//
|
||||||
// Note that the implementation for tuple and array will be checked at compile
|
// Note that the implementation for tuple and array will be checked at compile time,
|
||||||
// time, but the slice implementation needs to check the slice length! Also note
|
// but the slice implementation needs to check the slice length!
|
||||||
// that correct RGB color values must be integers in the 0..=255 range.
|
// Also note that correct RGB color values must be integers in the 0..=255 range.
|
||||||
|
|
||||||
// Tuple implementation
|
// Tuple implementation
|
||||||
impl TryFrom<(i16, i16, i16)> for Color {
|
impl TryFrom<(i16, i16, i16)> for Color {
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
// using_as.rs
|
// Type casting in Rust is done via the usage of the `as` operator.
|
||||||
|
// Please note that the `as` operator is not only used when type casting.
|
||||||
|
// It also helps with renaming imports.
|
||||||
//
|
//
|
||||||
// Type casting in Rust is done via the usage of the `as` operator. Please note
|
// The goal is to make sure that the division does not fail to compile
|
||||||
// that the `as` operator is not only used when type casting. It also helps with
|
// and returns the proper type.
|
||||||
// renaming imports.
|
// Execute `rustlings hint using_as` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// The goal is to make sure that the division does not fail to compile and
|
|
||||||
// returns the proper type.
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint using_as` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
// enums1.rs
|
// enums1.rs
|
||||||
//
|
|
||||||
// No hints this time! ;)
|
// No hints this time! ;)
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// enums2.rs
|
// enums2.rs
|
||||||
//
|
// Execute `rustlings hint enums2` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint enums2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// enums3.rs
|
// enums3.rs
|
||||||
//
|
|
||||||
// Address all the TODOs to make the tests pass!
|
// Address all the TODOs to make the tests pass!
|
||||||
//
|
// Execute `rustlings hint enums3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint enums3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -20,7 +17,6 @@ struct State {
|
||||||
color: (u8, u8, u8),
|
color: (u8, u8, u8),
|
||||||
position: Point,
|
position: Point,
|
||||||
quit: bool,
|
quit: bool,
|
||||||
message: String,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl State {
|
impl State {
|
||||||
|
@ -32,8 +28,8 @@ impl State {
|
||||||
self.quit = true;
|
self.quit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn echo(&mut self, s: String) {
|
fn echo(&self, s: String) {
|
||||||
self.message = s
|
println!("{}", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn move_position(&mut self, p: Point) {
|
fn move_position(&mut self, p: Point) {
|
||||||
|
@ -42,8 +38,7 @@ impl State {
|
||||||
|
|
||||||
fn process(&mut self, message: Message) {
|
fn process(&mut self, message: Message) {
|
||||||
// TODO: create a match expression to process the different message variants
|
// TODO: create a match expression to process the different message variants
|
||||||
// Remember: When passing a tuple as a function argument, you'll need extra parentheses:
|
// Remember: When passing a tuple as a function argument, you'll need extra parentheses: fn function((t, u, p, l, e))
|
||||||
// fn function((t, u, p, l, e))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,10 +52,9 @@ mod tests {
|
||||||
quit: false,
|
quit: false,
|
||||||
position: Point { x: 0, y: 0 },
|
position: Point { x: 0, y: 0 },
|
||||||
color: (0, 0, 0),
|
color: (0, 0, 0),
|
||||||
message: "hello world".to_string(),
|
|
||||||
};
|
};
|
||||||
state.process(Message::ChangeColor(255, 0, 255));
|
state.process(Message::ChangeColor(255, 0, 255));
|
||||||
state.process(Message::Echo(String::from("Hello world!")));
|
state.process(Message::Echo(String::from("hello world")));
|
||||||
state.process(Message::Move(Point { x: 10, y: 15 }));
|
state.process(Message::Move(Point { x: 10, y: 15 }));
|
||||||
state.process(Message::Quit);
|
state.process(Message::Quit);
|
||||||
|
|
||||||
|
@ -68,6 +62,5 @@ mod tests {
|
||||||
assert_eq!(state.position.x, 10);
|
assert_eq!(state.position.x, 10);
|
||||||
assert_eq!(state.position.y, 15);
|
assert_eq!(state.position.y, 15);
|
||||||
assert_eq!(state.quit, true);
|
assert_eq!(state.quit, true);
|
||||||
assert_eq!(state.message, "Hello world!");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Error handling
|
# Error handling
|
||||||
|
Most errors aren’t serious enough to require the program to stop entirely.
|
||||||
Most errors aren’t serious enough to require the program to stop entirely.
|
|
||||||
Sometimes, when a function fails, it’s for a reason that you can easily interpret and respond to.
|
Sometimes, when a function fails, it’s for a reason that you can easily interpret and respond to.
|
||||||
For example, if you try to open a file and that operation fails because the file doesn’t exist, you might want to create the file instead of terminating the process.
|
For example, if you try to open a file and that operation fails because the file doesn’t exist, you might want to create the file instead of terminating the process.
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,9 @@
|
||||||
// errors1.rs
|
// errors1.rs
|
||||||
//
|
// This function refuses to generate text to be printed on a nametag if
|
||||||
// This function refuses to generate text to be printed on a nametag if you pass
|
// you pass it an empty string. It'd be nicer if it explained what the problem
|
||||||
// it an empty string. It'd be nicer if it explained what the problem was,
|
// was, instead of just sometimes returning `None`. Thankfully, Rust has a similar
|
||||||
// instead of just sometimes returning `None`. Thankfully, Rust has a similar
|
// construct to `Option` that can be used to express error conditions. Let's use it!
|
||||||
// construct to `Option` that can be used to express error conditions. Let's use
|
// Execute `rustlings hint errors1` or use the `hint` watch subcommand for a hint.
|
||||||
// it!
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint errors1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,21 @@
|
||||||
// errors2.rs
|
// errors2.rs
|
||||||
//
|
|
||||||
// Say we're writing a game where you can buy items with tokens. All items cost
|
// Say we're writing a game where you can buy items with tokens. All items cost
|
||||||
// 5 tokens, and whenever you purchase items there is a processing fee of 1
|
// 5 tokens, and whenever you purchase items there is a processing fee of 1
|
||||||
// token. A player of the game will type in how many items they want to buy, and
|
// token. A player of the game will type in how many items they want to buy,
|
||||||
// the `total_cost` function will calculate the total cost of the tokens. Since
|
// and the `total_cost` function will calculate the total number of tokens.
|
||||||
// the player typed in the quantity, though, we get it as a string-- and they
|
// Since the player typed in the quantity, though, we get it as a string-- and
|
||||||
// might have typed anything, not just numbers!
|
// they might have typed anything, not just numbers!
|
||||||
//
|
|
||||||
// Right now, this function isn't handling the error case at all (and isn't
|
// Right now, this function isn't handling the error case at all (and isn't
|
||||||
// handling the success case properly either). What we want to do is: if we call
|
// handling the success case properly either). What we want to do is:
|
||||||
// the `total_cost` function on a string that is not a number, that function
|
// if we call the `parse` function on a string that is not a number, that
|
||||||
// will return a `ParseIntError`, and in that case, we want to immediately
|
// function will return a `ParseIntError`, and in that case, we want to
|
||||||
// return that error from our function and not try to multiply and add.
|
// immediately return that error from our function and not try to multiply
|
||||||
//
|
// and add.
|
||||||
// There are at least two ways to implement this that are both correct-- but one
|
|
||||||
// is a lot shorter!
|
// There are at least two ways to implement this that are both correct-- but
|
||||||
//
|
// one is a lot shorter!
|
||||||
// Execute `rustlings hint errors2` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint errors2` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
// errors3.rs
|
// errors3.rs
|
||||||
//
|
|
||||||
// This is a program that is trying to use a completed version of the
|
// This is a program that is trying to use a completed version of the
|
||||||
// `total_cost` function from the previous exercise. It's not working though!
|
// `total_cost` function from the previous exercise. It's not working though!
|
||||||
// Why not? What should we do to fix it?
|
// Why not? What should we do to fix it?
|
||||||
//
|
// Execute `rustlings hint errors3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint errors3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// errors4.rs
|
// errors4.rs
|
||||||
//
|
// Execute `rustlings hint errors4` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint errors4` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -16,7 +14,7 @@ enum CreationError {
|
||||||
|
|
||||||
impl PositiveNonzeroInteger {
|
impl PositiveNonzeroInteger {
|
||||||
fn new(value: i64) -> Result<PositiveNonzeroInteger, CreationError> {
|
fn new(value: i64) -> Result<PositiveNonzeroInteger, CreationError> {
|
||||||
// Hmm... Why is this always returning an Ok value?
|
// Hmm...? Why is this only returning an Ok value?
|
||||||
Ok(PositiveNonzeroInteger(value as u64))
|
Ok(PositiveNonzeroInteger(value as u64))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +1,20 @@
|
||||||
// errors5.rs
|
// errors5.rs
|
||||||
//
|
|
||||||
// This program uses an altered version of the code from errors4.
|
// This program uses an altered version of the code from errors4.
|
||||||
//
|
|
||||||
// This exercise uses some concepts that we won't get to until later in the
|
// This exercise uses some concepts that we won't get to until later in the course, like `Box` and the
|
||||||
// course, like `Box` and the `From` trait. It's not important to understand
|
// `From` trait. It's not important to understand them in detail right now, but you can read ahead if you like.
|
||||||
// them in detail right now, but you can read ahead if you like. For now, think
|
// For now, think of the `Box<dyn ...>` type as an "I want anything that does ???" type, which, given
|
||||||
// of the `Box<dyn ???>` type as an "I want anything that does ???" type, which,
|
// Rust's usual standards for runtime safety, should strike you as somewhat lenient!
|
||||||
// given Rust's usual standards for runtime safety, should strike you as
|
|
||||||
// somewhat lenient!
|
// In short, this particular use case for boxes is for when you want to own a value and you care only that it is a
|
||||||
//
|
// type which implements a particular trait. To do so, The Box is declared as of type Box<dyn Trait> where Trait is the trait
|
||||||
// In short, this particular use case for boxes is for when you want to own a
|
// the compiler looks for on any value used in that context. For this exercise, that context is the potential errors
|
||||||
// value and you care only that it is a type which implements a particular
|
// which can be returned in a Result.
|
||||||
// trait. To do so, The Box is declared as of type Box<dyn Trait> where Trait is
|
|
||||||
// the trait the compiler looks for on any value used in that context. For this
|
// What can we use to describe both errors? In other words, is there a trait which both errors implement?
|
||||||
// exercise, that context is the potential errors which can be returned in a
|
|
||||||
// Result.
|
// Execute `rustlings hint errors5` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// What can we use to describe both errors? In other words, is there a trait
|
|
||||||
// which both errors implement?
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint errors5` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
// errors6.rs
|
// errors6.rs
|
||||||
//
|
|
||||||
// Using catch-all error types like `Box<dyn error::Error>` isn't recommended
|
// Using catch-all error types like `Box<dyn error::Error>` isn't recommended
|
||||||
// for library code, where callers might want to make decisions based on the
|
// for library code, where callers might want to make decisions based on the
|
||||||
// error content, instead of printing it out or propagating it further. Here, we
|
// error content, instead of printing it out or propagating it further. Here,
|
||||||
// define a custom error type to make it possible for callers to decide what to
|
// we define a custom error type to make it possible for callers to decide
|
||||||
// do next when our function returns an error.
|
// what to do next when our function returns an error.
|
||||||
//
|
|
||||||
// Execute `rustlings hint errors6` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint errors6` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// functions1.rs
|
// functions1.rs
|
||||||
//
|
// Execute `rustlings hint functions1` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint functions1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// functions2.rs
|
// functions2.rs
|
||||||
//
|
// Execute `rustlings hint functions2` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint functions2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// functions3.rs
|
// functions3.rs
|
||||||
//
|
// Execute `rustlings hint functions3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint functions3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
// functions4.rs
|
// functions4.rs
|
||||||
//
|
// Execute `rustlings hint functions4` or use the `hint` watch subcommand for a hint.
|
||||||
// This store is having a sale where if the price is an even number, you get 10
|
|
||||||
// Rustbucks off, but if it's an odd number, it's 3 Rustbucks off. (Don't worry
|
// This store is having a sale where if the price is an even number, you get
|
||||||
// about the function bodies themselves, we're only interested in the signatures
|
// 10 Rustbucks off, but if it's an odd number, it's 3 Rustbucks off.
|
||||||
// for now. If anything, this is a good way to peek ahead to future exercises!)
|
// (Don't worry about the function bodies themselves, we're only interested
|
||||||
//
|
// in the signatures for now. If anything, this is a good way to peek ahead
|
||||||
// Execute `rustlings hint functions4` or use the `hint` watch subcommand for a
|
// to future exercises!)
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// functions5.rs
|
// functions5.rs
|
||||||
//
|
// Execute `rustlings hint functions5` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint functions5` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
// generics1.rs
|
// This shopping list program isn't compiling!
|
||||||
//
|
// Use your knowledge of generics to fix it.
|
||||||
// This shopping list program isn't compiling! Use your knowledge of generics to
|
|
||||||
// fix it.
|
// Execute `rustlings hint generics1` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint generics1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
// generics2.rs
|
|
||||||
//
|
|
||||||
// This powerful wrapper provides the ability to store a positive integer value.
|
// This powerful wrapper provides the ability to store a positive integer value.
|
||||||
// Rewrite it using generics so that it supports wrapping ANY type.
|
// Rewrite it using generics so that it supports wrapping ANY type.
|
||||||
//
|
|
||||||
// Execute `rustlings hint generics2` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint generics2` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
# Hashmaps
|
# Hashmaps
|
||||||
|
|
||||||
A *hash map* allows you to associate a value with a particular key.
|
A *hash map* allows you to associate a value with a particular key.
|
||||||
You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map),
|
You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map),
|
||||||
[*dictionary* in Python](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) or an *associative array* in other languages.
|
[*dictionary* in Python](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) or an *associative array* in other languages.
|
||||||
|
|
||||||
This is the other data structure that we've been talking about before, when
|
This is the other data structure that we've been talking about before, when
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
// hashmaps1.rs
|
// hashmaps1.rs
|
||||||
//
|
// A basket of fruits in the form of a hash map needs to be defined.
|
||||||
// A basket of fruits in the form of a hash map needs to be defined. The key
|
// The key represents the name of the fruit and the value represents
|
||||||
// represents the name of the fruit and the value represents how many of that
|
// how many of that particular fruit is in the basket. You have to put
|
||||||
// particular fruit is in the basket. You have to put at least three different
|
// at least three different types of fruits (e.g apple, banana, mango)
|
||||||
// types of fruits (e.g apple, banana, mango) in the basket and the total count
|
// in the basket and the total count of all the fruits should be at
|
||||||
// of all the fruits should be at least five.
|
// least five.
|
||||||
//
|
//
|
||||||
// Make me compile and pass the tests!
|
// Make me compile and pass the tests!
|
||||||
//
|
//
|
||||||
// Execute `rustlings hint hashmaps1` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint hashmaps1` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,15 @@
|
||||||
// hashmaps2.rs
|
// hashmaps2.rs
|
||||||
//
|
|
||||||
// We're collecting different fruits to bake a delicious fruit cake. For this,
|
// A basket of fruits in the form of a hash map is given. The key
|
||||||
// we have a basket, which we'll represent in the form of a hash map. The key
|
// represents the name of the fruit and the value represents how many
|
||||||
// represents the name of each fruit we collect and the value represents how
|
// of that particular fruit is in the basket. You have to put *MORE
|
||||||
// many of that particular fruit we have collected. Three types of fruits -
|
// THAN 11* fruits in the basket. Three types of fruits - Apple (4),
|
||||||
// Apple (4), Mango (2) and Lychee (5) are already in the basket hash map. You
|
// Mango (2) and Lychee (5) are already given in the basket. You are
|
||||||
// must add fruit to the basket so that there is at least one of each kind and
|
// not allowed to insert any more of these fruits!
|
||||||
// more than 11 in total - we have a lot of mouths to feed. You are not allowed
|
|
||||||
// to insert any more of these fruits!
|
|
||||||
//
|
//
|
||||||
// Make me pass the tests!
|
// Make me pass the tests!
|
||||||
//
|
//
|
||||||
// Execute `rustlings hint hashmaps2` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint hashmaps2` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -37,9 +34,9 @@ fn fruit_basket(basket: &mut HashMap<Fruit, u32>) {
|
||||||
];
|
];
|
||||||
|
|
||||||
for fruit in fruit_kinds {
|
for fruit in fruit_kinds {
|
||||||
// TODO: Insert new fruits if they are not already present in the
|
// TODO: Put new fruits if not already present. Note that you
|
||||||
// basket. Note that you are not allowed to put any type of fruit that's
|
// are not allowed to put any type of fruit that's already
|
||||||
// already present!
|
// present!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +44,6 @@ fn fruit_basket(basket: &mut HashMap<Fruit, u32>) {
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
// Don't modify this function!
|
|
||||||
fn get_fruit_basket() -> HashMap<Fruit, u32> {
|
fn get_fruit_basket() -> HashMap<Fruit, u32> {
|
||||||
let mut basket = HashMap::<Fruit, u32>::new();
|
let mut basket = HashMap::<Fruit, u32>::new();
|
||||||
basket.insert(Fruit::Apple, 4);
|
basket.insert(Fruit::Apple, 4);
|
||||||
|
@ -81,13 +77,4 @@ mod tests {
|
||||||
let count = basket.values().sum::<u32>();
|
let count = basket.values().sum::<u32>();
|
||||||
assert!(count > 11);
|
assert!(count > 11);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn all_fruit_types_in_basket() {
|
|
||||||
let mut basket = get_fruit_basket();
|
|
||||||
fruit_basket(&mut basket);
|
|
||||||
for amount in basket.values() {
|
|
||||||
assert_ne!(amount, &0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +1,26 @@
|
||||||
// hashmaps3.rs
|
// hashmaps3.rs
|
||||||
//
|
|
||||||
// A list of scores (one per line) of a soccer match is given. Each line is of
|
// A list of scores (one per line) of a soccer match is given. Each line
|
||||||
// the form : "<team_1_name>,<team_2_name>,<team_1_goals>,<team_2_goals>"
|
// is of the form :
|
||||||
|
// <team_1_name>,<team_2_name>,<team_1_goals>,<team_2_goals>
|
||||||
// Example: England,France,4,2 (England scored 4 goals, France 2).
|
// Example: England,France,4,2 (England scored 4 goals, France 2).
|
||||||
//
|
|
||||||
// You have to build a scores table containing the name of the team, goals the
|
// You have to build a scores table containing the name of the team, goals
|
||||||
// team scored, and goals the team conceded. One approach to build the scores
|
// the team scored, and goals the team conceded. One approach to build
|
||||||
// table is to use a Hashmap. The solution is partially written to use a
|
// the scores table is to use a Hashmap. The solution is partially
|
||||||
// Hashmap, complete it to pass the test.
|
// written to use a Hashmap, complete it to pass the test.
|
||||||
//
|
|
||||||
// Make me pass the tests!
|
// Make me pass the tests!
|
||||||
//
|
|
||||||
// Execute `rustlings hint hashmaps3` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint hashmaps3` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
// A structure to store the goal details of a team.
|
// A structure to store team name and its goal details.
|
||||||
struct Team {
|
struct Team {
|
||||||
|
name: String,
|
||||||
goals_scored: u8,
|
goals_scored: u8,
|
||||||
goals_conceded: u8,
|
goals_conceded: u8,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
// if1.rs
|
// if1.rs
|
||||||
//
|
|
||||||
// Execute `rustlings hint if1` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint if1` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
@ -25,9 +24,4 @@ mod tests {
|
||||||
fn fortytwo_is_bigger_than_thirtytwo() {
|
fn fortytwo_is_bigger_than_thirtytwo() {
|
||||||
assert_eq!(42, bigger(32, 42));
|
assert_eq!(42, bigger(32, 42));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn equal_numbers() {
|
|
||||||
assert_eq!(42, bigger(42, 42));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
// if2.rs
|
// if2.rs
|
||||||
//
|
|
||||||
// Step 1: Make me compile!
|
// Step 1: Make me compile!
|
||||||
// Step 2: Get the bar_for_fuzz and default_to_baz tests passing!
|
// Step 2: Get the bar_for_fuzz and default_to_baz tests passing!
|
||||||
//
|
|
||||||
// Execute `rustlings hint if2` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint if2` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
// if3.rs
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint if3` or use the `hint` watch subcommand for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
pub fn animal_habitat(animal: &str) -> &'static str {
|
|
||||||
let identifier = if animal == "crab" {
|
|
||||||
1
|
|
||||||
} else if animal == "gopher" {
|
|
||||||
2.0
|
|
||||||
} else if animal == "snake" {
|
|
||||||
3
|
|
||||||
} else {
|
|
||||||
"Unknown"
|
|
||||||
};
|
|
||||||
|
|
||||||
// DO NOT CHANGE THIS STATEMENT BELOW
|
|
||||||
let habitat = if identifier == 1 {
|
|
||||||
"Beach"
|
|
||||||
} else if identifier == 2 {
|
|
||||||
"Burrow"
|
|
||||||
} else if identifier == 3 {
|
|
||||||
"Desert"
|
|
||||||
} else {
|
|
||||||
"Unknown"
|
|
||||||
};
|
|
||||||
|
|
||||||
habitat
|
|
||||||
}
|
|
||||||
|
|
||||||
// No test changes needed.
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn gopher_lives_in_burrow() {
|
|
||||||
assert_eq!(animal_habitat("gopher"), "Burrow")
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn snake_lives_in_desert() {
|
|
||||||
assert_eq!(animal_habitat("snake"), "Desert")
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn crab_lives_on_beach() {
|
|
||||||
assert_eq!(animal_habitat("crab"), "Beach")
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn unknown_animal() {
|
|
||||||
assert_eq!(animal_habitat("dinosaur"), "Unknown")
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +1,13 @@
|
||||||
// intro1.rs
|
// intro1.rs
|
||||||
//
|
|
||||||
// About this `I AM NOT DONE` thing:
|
// About this `I AM NOT DONE` thing:
|
||||||
// We sometimes encourage you to keep trying things on a given exercise, even
|
// We sometimes encourage you to keep trying things on a given exercise, even
|
||||||
// after you already figured it out. If you got everything working and feel
|
// after you already figured it out. If you got everything working and feel
|
||||||
// ready for the next exercise, remove the `I AM NOT DONE` comment below.
|
// ready for the next exercise, remove the `I AM NOT DONE` comment below.
|
||||||
|
// Execute `rustlings hint intro1` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
//
|
||||||
// If you're running this using `rustlings watch`: The exercise file will be
|
// If you're running this using `rustlings watch`: The exercise file will be reloaded
|
||||||
// reloaded when you change one of the lines below! Try adding a `println!`
|
// when you change one of the lines below! Try adding a `println!` line, or try changing
|
||||||
// line, or try changing what it outputs in your terminal. Try removing a
|
// what it outputs in your terminal. Try removing a semicolon and see what happens!
|
||||||
// semicolon and see what happens!
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint intro1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -30,12 +26,5 @@ fn main() {
|
||||||
println!("solve the exercises. Good luck!");
|
println!("solve the exercises. Good luck!");
|
||||||
println!();
|
println!();
|
||||||
println!("The source for this exercise is in `exercises/intro/intro1.rs`. Have a look!");
|
println!("The source for this exercise is in `exercises/intro/intro1.rs`. Have a look!");
|
||||||
println!(
|
println!("Going forward, the source of the exercises will always be in the success/failure output.");
|
||||||
"Going forward, the source of the exercises will always be in the success/failure output."
|
|
||||||
);
|
|
||||||
println!();
|
|
||||||
println!(
|
|
||||||
"If you want to use rust-analyzer, Rust's LSP implementation, make sure your editor is set"
|
|
||||||
);
|
|
||||||
println!("up, and then run `rustlings lsp` before continuing.")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// intro2.rs
|
// intro2.rs
|
||||||
//
|
|
||||||
// Make the code print a greeting to the world.
|
// Make the code print a greeting to the world.
|
||||||
//
|
// Execute `rustlings hint intro2` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint intro2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,16 @@
|
||||||
// iterators1.rs
|
// iterators1.rs
|
||||||
//
|
//
|
||||||
// When performing operations on elements within a collection, iterators are
|
// Make me compile by filling in the `???`s
|
||||||
// essential. This module helps you get familiar with the structure of using an
|
|
||||||
// iterator and how to go through elements within an iterable collection.
|
|
||||||
//
|
//
|
||||||
// Make me compile by filling in the `???`s
|
// When performing operations on elements within a collection, iterators are essential.
|
||||||
|
// This module helps you get familiar with the structure of using an iterator and
|
||||||
|
// how to go through elements within an iterable collection.
|
||||||
//
|
//
|
||||||
// Execute `rustlings hint iterators1` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint iterators1` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
#[test]
|
fn main () {
|
||||||
fn main() {
|
|
||||||
let my_fav_fruits = vec!["banana", "custard apple", "avocado", "peach", "raspberry"];
|
let my_fav_fruits = vec!["banana", "custard apple", "avocado", "peach", "raspberry"];
|
||||||
|
|
||||||
let mut my_iterable_fav_fruits = ???; // TODO: Step 1
|
let mut my_iterable_fav_fruits = ???; // TODO: Step 1
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
// iterators2.rs
|
// iterators2.rs
|
||||||
//
|
|
||||||
// In this exercise, you'll learn some of the unique advantages that iterators
|
// In this exercise, you'll learn some of the unique advantages that iterators
|
||||||
// can offer. Follow the steps to complete the exercise.
|
// can offer. Follow the steps to complete the exercise.
|
||||||
//
|
// Execute `rustlings hint iterators2` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint iterators2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
// iterators3.rs
|
// iterators3.rs
|
||||||
//
|
// This is a bigger exercise than most of the others! You can do it!
|
||||||
// This is a bigger exercise than most of the others! You can do it! Here is
|
// Here is your mission, should you choose to accept it:
|
||||||
// your mission, should you choose to accept it:
|
|
||||||
// 1. Complete the divide function to get the first four tests to pass.
|
// 1. Complete the divide function to get the first four tests to pass.
|
||||||
// 2. Get the remaining tests to pass by completing the result_with_list and
|
// 2. Get the remaining tests to pass by completing the result_with_list and
|
||||||
// list_of_results functions.
|
// list_of_results functions.
|
||||||
//
|
// Execute `rustlings hint iterators3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint iterators3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -29,16 +26,14 @@ pub fn divide(a: i32, b: i32) -> Result<i32, DivisionError> {
|
||||||
todo!();
|
todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Complete the function and return a value of the correct type so the test
|
// Complete the function and return a value of the correct type so the test passes.
|
||||||
// passes.
|
|
||||||
// Desired output: Ok([1, 11, 1426, 3])
|
// Desired output: Ok([1, 11, 1426, 3])
|
||||||
fn result_with_list() -> () {
|
fn result_with_list() -> () {
|
||||||
let numbers = vec![27, 297, 38502, 81];
|
let numbers = vec![27, 297, 38502, 81];
|
||||||
let division_results = numbers.into_iter().map(|n| divide(n, 27));
|
let division_results = numbers.into_iter().map(|n| divide(n, 27));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Complete the function and return a value of the correct type so the test
|
// Complete the function and return a value of the correct type so the test passes.
|
||||||
// passes.
|
|
||||||
// Desired output: [Ok(1), Ok(11), Ok(1426), Ok(3)]
|
// Desired output: [Ok(1), Ok(11), Ok(1426), Ok(3)]
|
||||||
fn list_of_results() -> () {
|
fn list_of_results() -> () {
|
||||||
let numbers = vec![27, 297, 38502, 81];
|
let numbers = vec![27, 297, 38502, 81];
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// iterators4.rs
|
// iterators4.rs
|
||||||
//
|
// Execute `rustlings hint iterators4` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint iterators4` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
// iterators5.rs
|
// iterators5.rs
|
||||||
//
|
|
||||||
// Let's define a simple model to track Rustlings exercise progress. Progress
|
// Let's define a simple model to track Rustlings exercise progress. Progress
|
||||||
// will be modelled using a hash map. The name of the exercise is the key and
|
// will be modelled using a hash map. The name of the exercise is the key and
|
||||||
// the progress is the value. Two counting functions were created to count the
|
// the progress is the value. Two counting functions were created to count the
|
||||||
// number of exercises with a given progress. Recreate this counting
|
// number of exercises with a given progress. These counting functions use
|
||||||
// functionality using iterators. Try not to use imperative loops (for, while).
|
// imperative style for loops. Recreate this counting functionality using
|
||||||
// Only the two iterator methods (count_iterator and count_collection_iterator)
|
// iterators. Only the two iterator methods (count_iterator and
|
||||||
// need to be modified.
|
// count_collection_iterator) need to be modified.
|
||||||
|
// Execute `rustlings hint iterators5` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
//
|
||||||
// Execute `rustlings hint iterators5` or use the `hint` watch subcommand for a
|
// Make the code compile and the tests pass.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -68,27 +67,12 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn count_some() {
|
fn count_equals_for() {
|
||||||
let map = get_map();
|
let map = get_map();
|
||||||
assert_eq!(1, count_iterator(&map, Progress::Some));
|
assert_eq!(
|
||||||
}
|
count_for(&map, Progress::Complete),
|
||||||
|
count_iterator(&map, Progress::Complete)
|
||||||
#[test]
|
);
|
||||||
fn count_none() {
|
|
||||||
let map = get_map();
|
|
||||||
assert_eq!(2, count_iterator(&map, Progress::None));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn count_complete_equals_for() {
|
|
||||||
let map = get_map();
|
|
||||||
let progress_states = vec![Progress::Complete, Progress::Some, Progress::None];
|
|
||||||
for progress_state in progress_states {
|
|
||||||
assert_eq!(
|
|
||||||
count_for(&map, progress_state),
|
|
||||||
count_iterator(&map, progress_state)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -100,29 +84,13 @@ mod tests {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn count_collection_some() {
|
|
||||||
let collection = get_vec_map();
|
|
||||||
assert_eq!(1, count_collection_iterator(&collection, Progress::Some));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn count_collection_none() {
|
|
||||||
let collection = get_vec_map();
|
|
||||||
assert_eq!(4, count_collection_iterator(&collection, Progress::None));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn count_collection_equals_for() {
|
fn count_collection_equals_for() {
|
||||||
let progress_states = vec![Progress::Complete, Progress::Some, Progress::None];
|
|
||||||
let collection = get_vec_map();
|
let collection = get_vec_map();
|
||||||
|
assert_eq!(
|
||||||
for progress_state in progress_states {
|
count_collection_for(&collection, Progress::Complete),
|
||||||
assert_eq!(
|
count_collection_iterator(&collection, Progress::Complete)
|
||||||
count_collection_for(&collection, progress_state),
|
);
|
||||||
count_collection_iterator(&collection, progress_state)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_map() -> HashMap<String, Progress> {
|
fn get_map() -> HashMap<String, Progress> {
|
||||||
|
|
|
@ -3,20 +3,15 @@
|
||||||
Lifetimes tell the compiler how to check whether references live long
|
Lifetimes tell the compiler how to check whether references live long
|
||||||
enough to be valid in any given situation. For example lifetimes say
|
enough to be valid in any given situation. For example lifetimes say
|
||||||
"make sure parameter 'a' lives as long as parameter 'b' so that the return
|
"make sure parameter 'a' lives as long as parameter 'b' so that the return
|
||||||
value is valid".
|
value is valid".
|
||||||
|
|
||||||
They are only necessary on borrows, i.e. references,
|
They are only necessary on borrows, i.e. references,
|
||||||
since copied parameters or moves are owned in their scope and cannot
|
since copied parameters or moves are owned in their scope and cannot
|
||||||
be referenced outside. Lifetimes mean that calling code of e.g. functions
|
be referenced outside. Lifetimes mean that calling code of e.g. functions
|
||||||
can be checked to make sure their arguments are valid. Lifetimes are
|
can be checked to make sure their arguments are valid. Lifetimes are
|
||||||
restrictive of their callers.
|
restrictive of their callers.
|
||||||
|
|
||||||
If you'd like to learn more about lifetime annotations, the
|
|
||||||
[lifetimekata](https://tfpk.github.io/lifetimekata/) project
|
|
||||||
has a similar style of exercises to Rustlings, but is all about
|
|
||||||
learning to write lifetime annotations.
|
|
||||||
|
|
||||||
## Further information
|
## Further information
|
||||||
|
|
||||||
- [Lifetimes (in Rust By Example)](https://doc.rust-lang.org/stable/rust-by-example/scope/lifetime.html)
|
|
||||||
- [Validating References with Lifetimes](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html)
|
- [Validating References with Lifetimes](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html)
|
||||||
|
- [Lifetimes (in Rust By Example)](https://doc.rust-lang.org/stable/rust-by-example/scope/lifetime.html)
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
// lifetimes1.rs
|
// lifetimes1.rs
|
||||||
//
|
//
|
||||||
// The Rust compiler needs to know how to check whether supplied references are
|
// The Rust compiler needs to know how to check whether supplied references are
|
||||||
// valid, so that it can let the programmer know if a reference is at risk of
|
// valid, so that it can let the programmer know if a reference is at risk
|
||||||
// going out of scope before it is used. Remember, references are borrows and do
|
// of going out of scope before it is used. Remember, references are borrows
|
||||||
// not own their own data. What if their owner goes out of scope?
|
// and do not own their own data. What if their owner goes out of scope?
|
||||||
//
|
//
|
||||||
// Execute `rustlings hint lifetimes1` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint lifetimes1` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
// lifetimes2.rs
|
// lifetimes2.rs
|
||||||
//
|
//
|
||||||
// So if the compiler is just validating the references passed to the annotated
|
// So if the compiler is just validating the references passed
|
||||||
// parameters and the return type, what do we need to change?
|
// to the annotated parameters and the return type, what do
|
||||||
|
// we need to change?
|
||||||
//
|
//
|
||||||
// Execute `rustlings hint lifetimes2` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint lifetimes2` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
//
|
//
|
||||||
// Lifetimes are also needed when structs hold references.
|
// Lifetimes are also needed when structs hold references.
|
||||||
//
|
//
|
||||||
// Execute `rustlings hint lifetimes3` or use the `hint` watch subcommand for a
|
// Execute `rustlings hint lifetimes3` or use the `hint` watch subcommand for a hint.
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ Rust's macro system is very powerful, but also kind of difficult to wrap your
|
||||||
head around. We're not going to teach you how to write your own fully-featured
|
head around. We're not going to teach you how to write your own fully-featured
|
||||||
macros. Instead, we'll show you how to use and create them.
|
macros. Instead, we'll show you how to use and create them.
|
||||||
|
|
||||||
If you'd like to learn more about writing your own macros, the
|
If you'd like to learn more about writing your own macros, the
|
||||||
[macrokata](https://github.com/tfpk/macrokata) project has a similar style
|
[macrokata](https://github.com/tfpk/macrokata) project has a similar style
|
||||||
of exercises to Rustlings, but is all about learning to write Macros.
|
of exercises to Rustlings, but is all about learning to write Macros.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// macros1.rs
|
// macros1.rs
|
||||||
//
|
// Execute `rustlings hint macros1` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint macros1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// macros2.rs
|
// macros2.rs
|
||||||
//
|
// Execute `rustlings hint macros2` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint macros2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// macros3.rs
|
// macros3.rs
|
||||||
//
|
|
||||||
// Make me compile, without taking the macro out of the module!
|
// Make me compile, without taking the macro out of the module!
|
||||||
//
|
// Execute `rustlings hint macros3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint macros3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
// macros4.rs
|
// macros4.rs
|
||||||
//
|
// Execute `rustlings hint macros4` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint macros4` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
#[rustfmt::skip]
|
|
||||||
macro_rules! my_macro {
|
macro_rules! my_macro {
|
||||||
() => {
|
() => {
|
||||||
println!("Check out my macro!");
|
println!("Check out my macro!");
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// modules1.rs
|
// modules1.rs
|
||||||
//
|
// Execute `rustlings hint modules1` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint modules1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
// modules2.rs
|
// modules2.rs
|
||||||
//
|
// You can bring module paths into scopes and provide new names for them with the
|
||||||
// You can bring module paths into scopes and provide new names for them with
|
// 'use' and 'as' keywords. Fix these 'use' statements to make the code compile.
|
||||||
// the 'use' and 'as' keywords. Fix these 'use' statements to make the code
|
// Execute `rustlings hint modules2` or use the `hint` watch subcommand for a hint.
|
||||||
// compile.
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint modules2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
// modules3.rs
|
// modules3.rs
|
||||||
//
|
// You can use the 'use' keyword to bring module paths from modules from anywhere
|
||||||
// You can use the 'use' keyword to bring module paths from modules from
|
// and especially from the Rust standard library into your scope.
|
||||||
// anywhere and especially from the Rust standard library into your scope. Bring
|
// Bring SystemTime and UNIX_EPOCH
|
||||||
// SystemTime and UNIX_EPOCH from the std::time module. Bonus style points if
|
// from the std::time module. Bonus style points if you can do it with one line!
|
||||||
// you can do it with one line!
|
// Execute `rustlings hint modules3` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint modules3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,26 @@
|
||||||
// move_semantics1.rs
|
// move_semantics1.rs
|
||||||
//
|
// Execute `rustlings hint move_semantics1` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint move_semantics1` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let vec0 = vec![22, 44, 66];
|
let vec0 = Vec::new();
|
||||||
|
|
||||||
let vec1 = fill_vec(vec0);
|
let vec1 = fill_vec(vec0);
|
||||||
|
|
||||||
assert_eq!(vec1, vec![22, 44, 66, 88]);
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
|
|
||||||
|
vec1.push(88);
|
||||||
|
|
||||||
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
|
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
|
||||||
let vec = vec;
|
let mut vec = vec;
|
||||||
|
|
||||||
vec.push(88);
|
vec.push(22);
|
||||||
|
vec.push(44);
|
||||||
|
vec.push(66);
|
||||||
|
|
||||||
vec
|
vec
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +1,28 @@
|
||||||
// move_semantics2.rs
|
// move_semantics2.rs
|
||||||
//
|
// Make me compile without changing line 13 or moving line 10!
|
||||||
// Make the test pass by finding a way to keep both Vecs separate!
|
// Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let vec0 = vec![22, 44, 66];
|
let vec0 = Vec::new();
|
||||||
|
|
||||||
let mut vec1 = fill_vec(vec0);
|
let mut vec1 = fill_vec(vec0);
|
||||||
|
|
||||||
assert_eq!(vec0, vec![22, 44, 66]);
|
// Do not change the following line!
|
||||||
assert_eq!(vec1, vec![22, 44, 66, 88]);
|
println!("{} has length {} content `{:?}`", "vec0", vec0.len(), vec0);
|
||||||
|
|
||||||
|
vec1.push(88);
|
||||||
|
|
||||||
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
|
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
|
||||||
let mut vec = vec;
|
let mut vec = vec;
|
||||||
|
|
||||||
vec.push(88);
|
vec.push(22);
|
||||||
|
vec.push(44);
|
||||||
|
vec.push(66);
|
||||||
|
|
||||||
vec
|
vec
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,26 @@
|
||||||
// move_semantics3.rs
|
// move_semantics3.rs
|
||||||
//
|
// Make me compile without adding new lines-- just changing existing lines!
|
||||||
// Make me compile without adding new lines -- just changing existing lines! (no
|
// (no lines with multiple semicolons necessary!)
|
||||||
// lines with multiple semicolons necessary!)
|
// Execute `rustlings hint move_semantics3` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint move_semantics3` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let vec0 = vec![22, 44, 66];
|
let vec0 = Vec::new();
|
||||||
|
|
||||||
let mut vec1 = fill_vec(vec0);
|
let mut vec1 = fill_vec(vec0);
|
||||||
|
|
||||||
assert_eq!(vec1, vec![22, 44, 66, 88]);
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
|
|
||||||
|
vec1.push(88);
|
||||||
|
|
||||||
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
|
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
|
||||||
vec.push(88);
|
vec.push(22);
|
||||||
|
vec.push(44);
|
||||||
|
vec.push(66);
|
||||||
|
|
||||||
vec
|
vec
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,30 @@
|
||||||
// move_semantics4.rs
|
// move_semantics4.rs
|
||||||
//
|
// Refactor this code so that instead of passing `vec0` into the `fill_vec` function,
|
||||||
// Refactor this code so that instead of passing `vec0` into the `fill_vec`
|
// the Vector gets created in the function itself and passed back to the main
|
||||||
// function, the Vector gets created in the function itself and passed back to
|
// function.
|
||||||
// the main function.
|
// Execute `rustlings hint move_semantics4` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint move_semantics4` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let vec0 = vec![22, 44, 66];
|
let vec0 = Vec::new();
|
||||||
|
|
||||||
let mut vec1 = fill_vec(vec0);
|
let mut vec1 = fill_vec(vec0);
|
||||||
|
|
||||||
assert_eq!(vec1, vec![22, 44, 66, 88]);
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
|
|
||||||
|
vec1.push(88);
|
||||||
|
|
||||||
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// `fill_vec()` no longer takes `vec: Vec<i32>` as argument - don't change this!
|
// `fill_vec()` no longer takes `vec: Vec<i32>` as argument
|
||||||
fn fill_vec() -> Vec<i32> {
|
fn fill_vec() -> Vec<i32> {
|
||||||
// Instead, let's create and fill the Vec in here - how do you do that?
|
|
||||||
let mut vec = vec;
|
let mut vec = vec;
|
||||||
|
|
||||||
vec.push(88);
|
vec.push(22);
|
||||||
|
vec.push(44);
|
||||||
|
vec.push(66);
|
||||||
|
|
||||||
vec
|
vec
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
// move_semantics5.rs
|
// move_semantics5.rs
|
||||||
//
|
// Make me compile only by reordering the lines in `main()`, but without
|
||||||
// Make me compile only by reordering the lines in `main()`, but without adding,
|
// adding, changing or removing any of them.
|
||||||
// changing or removing any of them.
|
// Execute `rustlings hint move_semantics5` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint move_semantics5` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut x = 100;
|
let mut x = 100;
|
||||||
let y = &mut x;
|
let y = &mut x;
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// move_semantics6.rs
|
// move_semantics6.rs
|
||||||
//
|
// Execute `rustlings hint move_semantics6` or use the `hint` watch subcommand for a hint.
|
||||||
// You can't change anything except adding or removing references.
|
// You can't change anything except adding or removing references.
|
||||||
//
|
|
||||||
// Execute `rustlings hint move_semantics6` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
# Options
|
# Options
|
||||||
|
|
||||||
Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not.
|
Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not.
|
||||||
Option types are very common in Rust code, as they have a number of uses:
|
Option types are very common in Rust code, as they have a number of uses:
|
||||||
|
|
||||||
- Initial values
|
- Initial values
|
||||||
- Return values for functions that are not defined over their entire input range (partial functions)
|
- Return values for functions that are not defined over their entire input range (partial functions)
|
||||||
- Return value for otherwise reporting simple errors, where None is returned on error
|
- Return value for otherwise reporting simple errors, where None is returned on error
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// options1.rs
|
// options1.rs
|
||||||
//
|
// Execute `rustlings hint options1` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint options1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -9,9 +7,8 @@
|
||||||
// If it's before 10PM, there's 5 pieces left. At 10PM, someone eats them
|
// If it's before 10PM, there's 5 pieces left. At 10PM, someone eats them
|
||||||
// all, so there'll be no more left :(
|
// all, so there'll be no more left :(
|
||||||
fn maybe_icecream(time_of_day: u16) -> Option<u16> {
|
fn maybe_icecream(time_of_day: u16) -> Option<u16> {
|
||||||
// We use the 24-hour system here, so 10PM is a value of 22 and 12AM is a
|
// We use the 24-hour system here, so 10PM is a value of 22 and 12AM is a value of 0
|
||||||
// value of 0 The Option output should gracefully handle cases where
|
// The Option output should gracefully handle cases where time_of_day > 23.
|
||||||
// time_of_day > 23.
|
|
||||||
// TODO: Complete the function body - remember to return an Option!
|
// TODO: Complete the function body - remember to return an Option!
|
||||||
???
|
???
|
||||||
}
|
}
|
||||||
|
@ -31,8 +28,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn raw_value() {
|
fn raw_value() {
|
||||||
// TODO: Fix this test. How do you get at the value contained in the
|
// TODO: Fix this test. How do you get at the value contained in the Option?
|
||||||
// Option?
|
|
||||||
let icecreams = maybe_icecream(12);
|
let icecreams = maybe_icecream(12);
|
||||||
assert_eq!(icecreams, 5);
|
assert_eq!(icecreams, 5);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
// options2.rs
|
// options2.rs
|
||||||
//
|
// Execute `rustlings hint options2` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint options2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn simple_option() {
|
fn simple_option() {
|
||||||
let target = "rustlings";
|
let target = "rustlings";
|
||||||
|
@ -20,23 +20,17 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn layered_option() {
|
fn layered_option() {
|
||||||
let range = 10;
|
let mut range = 10;
|
||||||
let mut optional_integers: Vec<Option<i8>> = vec![None];
|
let mut optional_integers: Vec<Option<i8>> = Vec::new();
|
||||||
|
for i in 0..(range + 1) {
|
||||||
for i in 1..(range + 1) {
|
|
||||||
optional_integers.push(Some(i));
|
optional_integers.push(Some(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut cursor = range;
|
// TODO: make this a while let statement - remember that vector.pop also adds another layer of Option<T>
|
||||||
|
// You can stack `Option<T>`'s into while let and if let
|
||||||
// TODO: make this a while let statement - remember that vector.pop also
|
|
||||||
// adds another layer of Option<T>. You can stack `Option<T>`s into
|
|
||||||
// while let and if let.
|
|
||||||
integer = optional_integers.pop() {
|
integer = optional_integers.pop() {
|
||||||
assert_eq!(integer, cursor);
|
assert_eq!(integer, range);
|
||||||
cursor -= 1;
|
range -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_eq!(cursor, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// options3.rs
|
// options3.rs
|
||||||
//
|
// Execute `rustlings hint options3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint options3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -15,7 +13,7 @@ fn main() {
|
||||||
|
|
||||||
match y {
|
match y {
|
||||||
Some(p) => println!("Co-ordinates are {},{} ", p.x, p.y),
|
Some(p) => println!("Co-ordinates are {},{} ", p.x, p.y),
|
||||||
_ => panic!("no match!"),
|
_ => println!("no match"),
|
||||||
}
|
}
|
||||||
y; // Fix without deleting this line.
|
y; // Fix without deleting this line.
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// primitive_types1.rs
|
// primitive_types1.rs
|
||||||
//
|
// Fill in the rest of the line that has code missing!
|
||||||
// Fill in the rest of the line that has code missing! No hints, there's no
|
// No hints, there's no tricks, just get used to typing these :)
|
||||||
// tricks, just get used to typing these :)
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// primitive_types2.rs
|
// primitive_types2.rs
|
||||||
//
|
// Fill in the rest of the line that has code missing!
|
||||||
// Fill in the rest of the line that has code missing! No hints, there's no
|
// No hints, there's no tricks, just get used to typing these :)
|
||||||
// tricks, just get used to typing these :)
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// primitive_types3.rs
|
// primitive_types3.rs
|
||||||
//
|
|
||||||
// Create an array with at least 100 elements in it where the ??? is.
|
// Create an array with at least 100 elements in it where the ??? is.
|
||||||
//
|
// Execute `rustlings hint primitive_types3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint primitive_types3` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -14,6 +11,5 @@ fn main() {
|
||||||
println!("Wow, that's a big array!");
|
println!("Wow, that's a big array!");
|
||||||
} else {
|
} else {
|
||||||
println!("Meh, I eat arrays like that for breakfast.");
|
println!("Meh, I eat arrays like that for breakfast.");
|
||||||
panic!("Array not big enough, more elements needed")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// primitive_types4.rs
|
// primitive_types4.rs
|
||||||
//
|
|
||||||
// Get a slice out of Array a where the ??? is so that the test passes.
|
// Get a slice out of Array a where the ??? is so that the test passes.
|
||||||
//
|
// Execute `rustlings hint primitive_types4` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint primitive_types4` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// primitive_types5.rs
|
// primitive_types5.rs
|
||||||
//
|
|
||||||
// Destructure the `cat` tuple so that the println will work.
|
// Destructure the `cat` tuple so that the println will work.
|
||||||
//
|
// Execute `rustlings hint primitive_types5` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint primitive_types5` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
// primitive_types6.rs
|
// primitive_types6.rs
|
||||||
//
|
// Use a tuple index to access the second element of `numbers`.
|
||||||
// Use a tuple index to access the second element of `numbers`. You can put the
|
// You can put the expression for the second element where ??? is so that the test passes.
|
||||||
// expression for the second element where ??? is so that the test passes.
|
// Execute `rustlings hint primitive_types6` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint primitive_types6` or use the `hint` watch subcommand
|
|
||||||
// for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
// quiz1.rs
|
// quiz1.rs
|
||||||
//
|
|
||||||
// This is a quiz for the following sections:
|
// This is a quiz for the following sections:
|
||||||
// - Variables
|
// - Variables
|
||||||
// - Functions
|
// - Functions
|
||||||
// - If
|
// - If
|
||||||
//
|
|
||||||
// Mary is buying apples. The price of an apple is calculated as follows:
|
// Mary is buying apples. The price of an apple is calculated as follows:
|
||||||
// - An apple costs 2 rustbucks.
|
// - An apple costs 2 rustbucks.
|
||||||
// - If Mary buys more than 40 apples, each apple only costs 1 rustbuck!
|
// - If Mary buys more than 40 apples, each apple only costs 1 rustbuck!
|
||||||
// Write a function that calculates the price of an order of apples given the
|
// Write a function that calculates the price of an order of apples given
|
||||||
// quantity bought.
|
// the quantity bought. No hints this time!
|
||||||
//
|
|
||||||
// No hints this time ;)
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
// quiz2.rs
|
// quiz2.rs
|
||||||
//
|
|
||||||
// This is a quiz for the following sections:
|
// This is a quiz for the following sections:
|
||||||
// - Strings
|
// - Strings
|
||||||
// - Vecs
|
// - Vecs
|
||||||
// - Move semantics
|
// - Move semantics
|
||||||
// - Modules
|
// - Modules
|
||||||
// - Enums
|
// - Enums
|
||||||
//
|
|
||||||
// Let's build a little machine in the form of a function. As input, we're going
|
// Let's build a little machine in form of a function.
|
||||||
// to give a list of strings and commands. These commands determine what action
|
// As input, we're going to give a list of strings and commands. These commands
|
||||||
// is going to be applied to the string. It can either be:
|
// determine what action is going to be applied to the string. It can either be:
|
||||||
// - Uppercase the string
|
// - Uppercase the string
|
||||||
// - Trim the string
|
// - Trim the string
|
||||||
// - Append "bar" to the string a specified amount of times
|
// - Append "bar" to the string a specified amount of times
|
||||||
|
@ -17,7 +16,6 @@
|
||||||
// - The input is going to be a Vector of a 2-length tuple,
|
// - The input is going to be a Vector of a 2-length tuple,
|
||||||
// the first element is the string, the second one is the command.
|
// the first element is the string, the second one is the command.
|
||||||
// - The output element is going to be a Vector of strings.
|
// - The output element is going to be a Vector of strings.
|
||||||
//
|
|
||||||
// No hints this time!
|
// No hints this time!
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
// quiz3.rs
|
// quiz3.rs
|
||||||
//
|
|
||||||
// This quiz tests:
|
// This quiz tests:
|
||||||
// - Generics
|
// - Generics
|
||||||
// - Traits
|
// - Traits
|
||||||
//
|
// An imaginary magical school has a new report card generation system written in Rust!
|
||||||
// An imaginary magical school has a new report card generation system written
|
// Currently the system only supports creating report cards where the student's grade
|
||||||
// in Rust! Currently the system only supports creating report cards where the
|
// is represented numerically (e.g. 1.0 -> 5.5).
|
||||||
// student's grade is represented numerically (e.g. 1.0 -> 5.5). However, the
|
// However, the school also issues alphabetical grades (A+ -> F-) and needs
|
||||||
// school also issues alphabetical grades (A+ -> F-) and needs to be able to
|
// to be able to print both types of report card!
|
||||||
// print both types of report card!
|
|
||||||
//
|
|
||||||
// Make the necessary code changes in the struct ReportCard and the impl block
|
// Make the necessary code changes in the struct ReportCard and the impl block
|
||||||
// to support alphabetical report cards. Change the Grade in the second test to
|
// to support alphabetical report cards. Change the Grade in the second test to "A+"
|
||||||
// "A+" to show that your changes allow alphabetical grades.
|
// to show that your changes allow alphabetical grades.
|
||||||
//
|
|
||||||
// Execute `rustlings hint quiz3` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint quiz3` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
# Smart Pointers
|
# Smart Pointers
|
||||||
|
|
||||||
In Rust, smart pointers are variables that contain an address in memory and reference some other data, but they also have additional metadata and capabilities.
|
In Rust, smart pointers are variables that contain an address in memory and reference some other data, but they also have additional metadata and capabilities.
|
||||||
Smart pointers in Rust often own the data they point to, while references only borrow data.
|
Smart pointers in Rust often own the data they point to, while references only borrow data.
|
||||||
|
|
||||||
|
|
|
@ -1,24 +1,21 @@
|
||||||
// arc1.rs
|
// arc1.rs
|
||||||
//
|
// In this exercise, we are given a Vec of u32 called "numbers" with values ranging
|
||||||
// In this exercise, we are given a Vec of u32 called "numbers" with values
|
// from 0 to 99 -- [ 0, 1, 2, ..., 98, 99 ]
|
||||||
// ranging from 0 to 99 -- [ 0, 1, 2, ..., 98, 99 ] We would like to use this
|
// We would like to use this set of numbers within 8 different threads simultaneously.
|
||||||
// set of numbers within 8 different threads simultaneously. Each thread is
|
// Each thread is going to get the sum of every eighth value, with an offset.
|
||||||
// going to get the sum of every eighth value, with an offset.
|
|
||||||
//
|
|
||||||
// The first thread (offset 0), will sum 0, 8, 16, ...
|
// The first thread (offset 0), will sum 0, 8, 16, ...
|
||||||
// The second thread (offset 1), will sum 1, 9, 17, ...
|
// The second thread (offset 1), will sum 1, 9, 17, ...
|
||||||
// The third thread (offset 2), will sum 2, 10, 18, ...
|
// The third thread (offset 2), will sum 2, 10, 18, ...
|
||||||
// ...
|
// ...
|
||||||
// The eighth thread (offset 7), will sum 7, 15, 23, ...
|
// The eighth thread (offset 7), will sum 7, 15, 23, ...
|
||||||
//
|
|
||||||
// Because we are using threads, our values need to be thread-safe. Therefore,
|
// Because we are using threads, our values need to be thread-safe. Therefore,
|
||||||
// we are using Arc. We need to make a change in each of the two TODOs.
|
// we are using Arc. We need to make a change in each of the two TODOs.
|
||||||
//
|
|
||||||
|
|
||||||
// Make this code compile by filling in a value for `shared_numbers` where the
|
// Make this code compile by filling in a value for `shared_numbers` where the
|
||||||
// first TODO comment is, and create an initial binding for `child_numbers`
|
// first TODO comment is, and create an initial binding for `child_numbers`
|
||||||
// where the second TODO comment is. Try not to create any copies of the
|
// where the second TODO comment is. Try not to create any copies of the `numbers` Vec!
|
||||||
// `numbers` Vec!
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint arc1` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint arc1` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
@ -35,7 +32,7 @@ fn main() {
|
||||||
for offset in 0..8 {
|
for offset in 0..8 {
|
||||||
let child_numbers = // TODO
|
let child_numbers = // TODO
|
||||||
joinhandles.push(thread::spawn(move || {
|
joinhandles.push(thread::spawn(move || {
|
||||||
let sum: u32 = child_numbers.iter().filter(|&&n| n % 8 == offset).sum();
|
let sum: u32 = child_numbers.iter().filter(|n| *n % 8 == offset).sum();
|
||||||
println!("Sum of offset {} is {}", offset, sum);
|
println!("Sum of offset {} is {}", offset, sum);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,13 @@
|
||||||
// box1.rs
|
// box1.rs
|
||||||
//
|
//
|
||||||
// At compile time, Rust needs to know how much space a type takes up. This
|
// At compile time, Rust needs to know how much space a type takes up. This becomes problematic
|
||||||
// becomes problematic for recursive types, where a value can have as part of
|
// for recursive types, where a value can have as part of itself another value of the same type.
|
||||||
// itself another value of the same type. To get around the issue, we can use a
|
// To get around the issue, we can use a `Box` - a smart pointer used to store data on the heap,
|
||||||
// `Box` - a smart pointer used to store data on the heap, which also allows us
|
// which also allows us to wrap a recursive type.
|
||||||
// to wrap a recursive type.
|
|
||||||
//
|
//
|
||||||
// The recursive type we're implementing in this exercise is the `cons list` - a
|
// The recursive type we're implementing in this exercise is the `cons list` - a data structure
|
||||||
// data structure frequently found in functional programming languages. Each
|
// frequently found in functional programming languages. Each item in a cons list contains two
|
||||||
// item in a cons list contains two elements: the value of the current item and
|
// elements: the value of the current item and the next item. The last item is a value called `Nil`.
|
||||||
// the next item. The last item is a value called `Nil`.
|
|
||||||
//
|
//
|
||||||
// Step 1: use a `Box` in the enum definition to make the code compile
|
// Step 1: use a `Box` in the enum definition to make the code compile
|
||||||
// Step 2: create both empty and non-empty cons lists by replacing `todo!()`
|
// Step 2: create both empty and non-empty cons lists by replacing `todo!()`
|
||||||
|
|
|
@ -1,16 +1,9 @@
|
||||||
// cow1.rs
|
// cow1.rs
|
||||||
//
|
|
||||||
// This exercise explores the Cow, or Clone-On-Write type. Cow is a
|
// This exercise explores the Cow, or Clone-On-Write type.
|
||||||
// clone-on-write smart pointer. It can enclose and provide immutable access to
|
// Cow is a clone-on-write smart pointer.
|
||||||
// borrowed data, and clone the data lazily when mutation or ownership is
|
// It can enclose and provide immutable access to borrowed data, and clone the data lazily when mutation or ownership is required.
|
||||||
// required. The type is designed to work with general borrowed data via the
|
// The type is designed to work with general borrowed data via the Borrow trait.
|
||||||
// Borrow trait.
|
|
||||||
//
|
|
||||||
// This exercise is meant to show you what to expect when passing data to Cow.
|
|
||||||
// Fix the unit tests by checking for Cow::Owned(_) and Cow::Borrowed(_) at the
|
|
||||||
// TODO markers.
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint cow1` or use the `hint` watch subcommand for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -27,52 +20,29 @@ fn abs_all<'a, 'b>(input: &'a mut Cow<'b, [i32]>) -> &'a mut Cow<'b, [i32]> {
|
||||||
input
|
input
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
fn main() {
|
||||||
mod tests {
|
// No clone occurs because `input` doesn't need to be mutated.
|
||||||
use super::*;
|
let slice = [0, 1, 2];
|
||||||
|
let mut input = Cow::from(&slice[..]);
|
||||||
#[test]
|
match abs_all(&mut input) {
|
||||||
fn reference_mutation() -> Result<(), &'static str> {
|
Cow::Borrowed(_) => println!("I borrowed the slice!"),
|
||||||
// Clone occurs because `input` needs to be mutated.
|
_ => panic!("expected borrowed value"),
|
||||||
let slice = [-1, 0, 1];
|
|
||||||
let mut input = Cow::from(&slice[..]);
|
|
||||||
match abs_all(&mut input) {
|
|
||||||
Cow::Owned(_) => Ok(()),
|
|
||||||
_ => Err("Expected owned value"),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
// Clone occurs because `input` needs to be mutated.
|
||||||
fn reference_no_mutation() -> Result<(), &'static str> {
|
let slice = [-1, 0, 1];
|
||||||
// No clone occurs because `input` doesn't need to be mutated.
|
let mut input = Cow::from(&slice[..]);
|
||||||
let slice = [0, 1, 2];
|
match abs_all(&mut input) {
|
||||||
let mut input = Cow::from(&slice[..]);
|
Cow::Owned(_) => println!("I modified the slice and now own it!"),
|
||||||
match abs_all(&mut input) {
|
_ => panic!("expected owned value"),
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
// No clone occurs because `input` is already owned.
|
||||||
fn owned_no_mutation() -> Result<(), &'static str> {
|
let slice = vec![-1, 0, 1];
|
||||||
// We can also pass `slice` without `&` so Cow owns it directly. In this
|
let mut input = Cow::from(slice);
|
||||||
// case no mutation occurs and thus also no clone, but the result is
|
match abs_all(&mut input) {
|
||||||
// still owned because it was never borrowed or mutated.
|
// TODO
|
||||||
let slice = vec![0, 1, 2];
|
Cow::Borrowed(_) => println!("I own this slice!"),
|
||||||
let mut input = Cow::from(slice);
|
_ => panic!("expected borrowed value"),
|
||||||
match abs_all(&mut input) {
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn owned_mutation() -> Result<(), &'static str> {
|
|
||||||
// Of course this is also the case if a mutation does occur. In this
|
|
||||||
// case the call to `to_mut()` in the abs_all() function returns a
|
|
||||||
// reference to the same data as before.
|
|
||||||
let slice = vec![-1, 0, 1];
|
|
||||||
let mut input = Cow::from(slice);
|
|
||||||
match abs_all(&mut input) {
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,9 @@
|
||||||
// rc1.rs
|
// rc1.rs
|
||||||
//
|
// In this exercise, we want to express the concept of multiple owners via the Rc<T> type.
|
||||||
// In this exercise, we want to express the concept of multiple owners via the
|
// This is a model of our solar system - there is a Sun type and multiple Planets.
|
||||||
// Rc<T> type. This is a model of our solar system - there is a Sun type and
|
// The Planets take ownership of the sun, indicating that they revolve around the sun.
|
||||||
// multiple Planets. The Planets take ownership of the sun, indicating that they
|
|
||||||
// revolve around the sun.
|
// Make this code compile by using the proper Rc primitives to express that the sun has multiple owners.
|
||||||
//
|
|
||||||
// Make this code compile by using the proper Rc primitives to express that the
|
|
||||||
// sun has multiple owners.
|
|
||||||
//
|
|
||||||
// Execute `rustlings hint rc1` or use the `hint` watch subcommand for a hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -35,7 +30,6 @@ impl Planet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let sun = Rc::new(Sun {});
|
let sun = Rc::new(Sun {});
|
||||||
println!("reference count = {}", Rc::strong_count(&sun)); // 1 reference
|
println!("reference count = {}", Rc::strong_count(&sun)); // 1 reference
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// strings1.rs
|
// strings1.rs
|
||||||
//
|
|
||||||
// Make me compile without changing the function signature!
|
// Make me compile without changing the function signature!
|
||||||
//
|
// Execute `rustlings hint strings1` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint strings1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// strings2.rs
|
// strings2.rs
|
||||||
//
|
|
||||||
// Make me compile without changing the function signature!
|
// Make me compile without changing the function signature!
|
||||||
//
|
// Execute `rustlings hint strings2` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint strings2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// strings3.rs
|
// strings3.rs
|
||||||
//
|
// Execute `rustlings hint strings3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint strings3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
// strings4.rs
|
// strings4.rs
|
||||||
//
|
|
||||||
// Ok, here are a bunch of values-- some are `String`s, some are `&str`s. Your
|
// Ok, here are a bunch of values-- some are `String`s, some are `&str`s. Your
|
||||||
// task is to call one of these two functions on each value depending on what
|
// task is to call one of these two functions on each value depending on what
|
||||||
// you think each value is. That is, add either `string_slice` or `string`
|
// you think each value is. That is, add either `string_slice` or `string`
|
||||||
// before the parentheses on each line. If you're right, it will compile!
|
// before the parentheses on each line. If you're right, it will compile!
|
||||||
//
|
|
||||||
// No hints this time!
|
// No hints this time!
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// structs1.rs
|
// structs1.rs
|
||||||
//
|
|
||||||
// Address all the TODOs to make the tests pass!
|
// Address all the TODOs to make the tests pass!
|
||||||
//
|
// Execute `rustlings hint structs1` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint structs1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// structs2.rs
|
// structs2.rs
|
||||||
//
|
|
||||||
// Address all the TODOs to make the tests pass!
|
// Address all the TODOs to make the tests pass!
|
||||||
//
|
// Execute `rustlings hint structs2` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint structs2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
// structs3.rs
|
// structs3.rs
|
||||||
//
|
|
||||||
// Structs contain data, but can also have logic. In this exercise we have
|
// Structs contain data, but can also have logic. In this exercise we have
|
||||||
// defined the Package struct and we want to test some logic attached to it.
|
// defined the Package struct and we want to test some logic attached to it.
|
||||||
// Make the code compile and the tests pass!
|
// Make the code compile and the tests pass!
|
||||||
//
|
// Execute `rustlings hint structs3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint structs3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
@ -13,15 +10,13 @@
|
||||||
struct Package {
|
struct Package {
|
||||||
sender_country: String,
|
sender_country: String,
|
||||||
recipient_country: String,
|
recipient_country: String,
|
||||||
weight_in_grams: u32,
|
weight_in_grams: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Package {
|
impl Package {
|
||||||
fn new(sender_country: String, recipient_country: String, weight_in_grams: u32) -> Package {
|
fn new(sender_country: String, recipient_country: String, weight_in_grams: i32) -> Package {
|
||||||
if weight_in_grams < 10 {
|
if weight_in_grams <= 0 {
|
||||||
// This is not how you should handle errors in Rust,
|
panic!("Can not ship a weightless package.")
|
||||||
// but we will learn about error handling later.
|
|
||||||
panic!("Can not ship a package with weight below 10 grams.")
|
|
||||||
} else {
|
} else {
|
||||||
Package {
|
Package {
|
||||||
sender_country,
|
sender_country,
|
||||||
|
@ -35,7 +30,7 @@ impl Package {
|
||||||
// Something goes here...
|
// Something goes here...
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_fees(&self, cents_per_gram: u32) -> ??? {
|
fn get_fees(&self, cents_per_gram: i32) -> ??? {
|
||||||
// Something goes here...
|
// Something goes here...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,7 +45,7 @@ mod tests {
|
||||||
let sender_country = String::from("Spain");
|
let sender_country = String::from("Spain");
|
||||||
let recipient_country = String::from("Austria");
|
let recipient_country = String::from("Austria");
|
||||||
|
|
||||||
Package::new(sender_country, recipient_country, 5);
|
Package::new(sender_country, recipient_country, -2210);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
// tests1.rs
|
// tests1.rs
|
||||||
//
|
// Tests are important to ensure that your code does what you think it should do.
|
||||||
// Tests are important to ensure that your code does what you think it should
|
// Tests can be run on this file with the following command:
|
||||||
// do. Tests can be run on this file with the following command: rustlings run
|
// rustlings run tests1
|
||||||
// tests1
|
|
||||||
//
|
// This test has a problem with it -- make the test compile! Make the test
|
||||||
// This test has a problem with it -- make the test compile! Make the test pass!
|
// pass! Make the test fail!
|
||||||
// Make the test fail!
|
// Execute `rustlings hint tests1` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint tests1` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
// tests2.rs
|
// tests2.rs
|
||||||
//
|
// This test has a problem with it -- make the test compile! Make the test
|
||||||
// This test has a problem with it -- make the test compile! Make the test pass!
|
// pass! Make the test fail!
|
||||||
// Make the test fail!
|
// Execute `rustlings hint tests2` or use the `hint` watch subcommand for a hint.
|
||||||
//
|
|
||||||
// Execute `rustlings hint tests2` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
// tests3.rs
|
// tests3.rs
|
||||||
//
|
|
||||||
// This test isn't testing our function -- make it do that in such a way that
|
// This test isn't testing our function -- make it do that in such a way that
|
||||||
// the test passes. Then write a second test that tests whether we get the
|
// the test passes. Then write a second test that tests whether we get the result
|
||||||
// result we expect to get when we call `is_even(5)`.
|
// we expect to get when we call `is_even(5)`.
|
||||||
//
|
// Execute `rustlings hint tests3` or use the `hint` watch subcommand for a hint.
|
||||||
// Execute `rustlings hint tests3` or use the `hint` watch subcommand for a
|
|
||||||
// hint.
|
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue