<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="253952" data-post-id="253952">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="corka149" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/corka149/120/16931_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  corka149
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-253952-v100-1" class="anchor" href="#p-253952-v100-1" aria-label="Heading link" rel="nofollow"></a>v1.0.0</h1>
<p>I know it exists but never had the time to implement it. I am talking about that patching of lists at top level never worked. This was for me the milestone for v1.0.0. Finally it is fixed. <img src="https://forum.elixirforum.com/images/emoji/apple/partying_face.png?v=15" title=":partying_face:" class="emoji" alt=":partying_face:" loading="lazy" width="20" height="20">.</p>
<p>Changes:</p>
<ul>
<li>Allow lists at top level of Jsonpatch.apply_patch</li>
<li>Fix error message when updating a non existing key in list</li>
<li>Performance boost for diffing</li>
</ul>
<p>Example of new feature:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(1)&gt; source = [1, 2, 3, 5, 6]
[1, 2, 3, 5, 6]
iex(2)&gt; destination = [1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
iex(3)&gt; patch = Jsonpatch.diff source, destination
[
  %Jsonpatch.Operation.Add{path: "/5", value: 6},
  %Jsonpatch.Operation.Replace{path: "/4", value: 5},
  %Jsonpatch.Operation.Replace{path: "/3", value: 4}
]
iex(4)&gt; Jsonpatch.apply_patch! patch, source
[1, 2, 3, 4, 5, 6]
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="253952" data-batch-url="/posts/batch_likers">
                        8
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/jsonpatch-pure-elixir-implementation-of-rfc-6902/32007/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-253952" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="253952"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="258077" data-post-id="258077">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="corka149" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/corka149/120/16931_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  corka149
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-258077-v101-1" class="anchor" href="#p-258077-v101-1" aria-label="Heading link" rel="nofollow"></a>v1.0.1</h1>
<p>This version fixes a small bug while creating diffs.</p>
<p>Changes:</p>
<ul>
<li>Escape remaining keys before comparing them to the (already escaped) keys from earlier in the diffing process when determining Remove operations</li>
</ul>
<p>Kudos to <a class="mention" href="/u/acbullen" rel="nofollow">@ACBullen</a> for detecting and fixing it. <img src="https://forum.elixirforum.com/images/emoji/apple/pray.png?v=15" title=":pray:" class="emoji" alt=":pray:" loading="lazy" width="20" height="20"></p>
<p>Go this way for the new version <img src="https://forum.elixirforum.com/images/emoji/apple/point_right.png?v=15" title=":point_right:" class="emoji" alt=":point_right:" loading="lazy" width="20" height="20">  <a href="https://hex.pm/packages/jsonpatch/1.0.1" class="inline-onebox" rel="nofollow">jsonpatch | Hex</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="258077" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/jsonpatch-pure-elixir-implementation-of-rfc-6902/32007/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-258077" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="258077"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="287438" data-post-id="287438">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="corka149" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/corka149/120/16931_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  corka149
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-287438-v102-1" class="anchor" href="#p-287438-v102-1" aria-label="Heading link" rel="nofollow"></a>v1.0.2</h1>
<p>This version brings another fix for creating diffs.</p>
<p>Changes:</p>
<p><em>Before</em></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">source = %{"id" =&gt; nil}
destination = %{"id" =&gt; nil}

[%Jsonpatch.Operation.Add{path: "/id", value: nil}] == Json.diff source, destination
</code></pre>
<p><em>With hotfix</em></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">source = %{"id" =&gt; nil}
destination = %{"id" =&gt; nil}

[] == Json.diff source, destination
</code></pre>
<p>Big thanks to <a class="mention" href="/u/stuartc" rel="nofollow">@stuartc</a> for the merge request!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="287438" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/jsonpatch-pure-elixir-implementation-of-rfc-6902/32007/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-287438" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="287438"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="289623" data-post-id="289623">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="corka149" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/corka149/120/16931_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  corka149
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-289623-v200-1" class="anchor" href="#p-289623-v200-1" aria-label="Heading link" rel="nofollow"></a>v2.0.0</h1>
<p>The Jsonpatch library got thanks to big efforts from <span class="mention">@visciang</span> and the Athonet Team a new major version. The new major version was necessary because of a rework of the public API. From my point of view they make the library more easier to use without converting too much to Jsonpatch’s own struct.</p>
<p>Checkout the updated docs: <a href="https://hexdocs.pm/jsonpatch/2.0.0/readme.html" class="inline-onebox" rel="noopener nofollow ugc">Jsonpatch — Jsonpatch v2.0.0</a></p>
<h2><a name="p-289623-changelog-2" class="anchor" href="#p-289623-changelog-2" aria-label="Heading link" rel="nofollow"></a>Changelog</h2>
<ul>
<li>Bugfix - ADD behaviour is now compliant with RFC (insert or update)</li>
<li>Bugfix - allow usage of nil values, previous implementation used <code>Map.get</code> with default <code>nil</code> to detect if a key was not present</li>
<li>Change - COPY operation to be based on ADD operation (as per RFC)</li>
<li>Change - MOVE operation to be based on COPY+REMOVE operation (as per RFC)</li>
<li>Change - REPLACE operation to be based on REMOVE+ADD operation (as per RFC)</li>
<li>Change - <code>Jsonpatch.apply_patch()</code> signature changes:</li>
<li>patches can be defined as <code>Jsonpatch.Operation.Add/Copy/Remove/...</code> structs or with plain map conforming to the jsonpatch schema</li>
<li>error reason is now defined with a <code>{:error, %Jsonpatch.Error{}}</code> tuple.<br>
%Jsonpatch.Error{patch_index: _, path: _, reason: _} reports the patch index, the path and the reason that caused the error.</li>
<li>Removed - <code>Jsonpatch.Mapper</code> module, in favour of new Jsonpatch.apply_patch signature</li>
<li>Removed - <code>Jsonpatch.Operation</code> protocol</li>
<li>Feature - introduced new <code>Jsonpatch.apply_patch()</code> option <code>keys: {:custom, convert_fn}</code> to convert path fragments with a user specific logic</li>
<li>Improvements - increased test coverage</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="289623" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/jsonpatch-pure-elixir-implementation-of-rfc-6902/32007/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-289623" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="289623"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="297222" data-post-id="297222">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="corka149" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/corka149/120/16931_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  corka149
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-297222-v211-1" class="anchor" href="#p-297222-v211-1" aria-label="Heading link" rel="nofollow"></a>v2.1.1</h1>
<p>This version should make the library more compatible with other libraries and frameworks by favoring maps over structs when creating diffs.</p>
<p>An updated examples of creating a diff looks like:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">source = %{"name" =&gt; "Bob", "married" =&gt; false, "hobbies" =&gt; ["Sport", "Elixir", "Football"]}
destination = %{"name" =&gt; "Bob", "married" =&gt; true, "hobbies" =&gt; ["Elixir!"], "age" =&gt; 33}
Jsonpatch.diff(source, destination)
[
  %{path: "/married", value: true, op: "replace"},
  %{path: "/hobbies/2", op: "remove"},
  %{path: "/hobbies/1", op: "remove"},
  %{path: "/hobbies/0", value: "Elixir!", op: "replace"},
  %{path: "/age", value: 33, op: "add"}
]
</code></pre>
<p>The Jsonpatch structs were not removed and are still valid and usable!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297222" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/jsonpatch-pure-elixir-implementation-of-rfc-6902/32007/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-297222" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297222"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="319435" data-post-id="319435">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="corka149" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/corka149/120/16931_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  corka149
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-319435-v220-1" class="anchor" href="#p-319435-v220-1" aria-label="Heading link" rel="nofollow"></a>v2.2.0</h1>
<p>Yet another improvement.</p>
<p>The new version solves some edge cases regarding patching the root document by providing <code>""</code> as path. In addition thx to <a class="mention" href="/u/tulinmola" rel="nofollow">@tulinmola</a> a new option was added that allows to ignore invalid paths.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">      iex&gt; # Patch will succeed, not applying invalid path operations.
      iex&gt; patch = [
      ...&gt; %{op: "replace", path: "/name", value: "Alice"},
      ...&gt; %{op: "replace", path: "/age", value: 42}
      ...&gt; ]
      iex&gt; target = %{"name" =&gt; "Bob"} # No age in target
      iex&gt; Jsonpatch.apply_patch(patch, target, ignore_invalid_paths: true)
      {:ok, %{"name" =&gt; "Alice"}}
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="319435" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/jsonpatch-pure-elixir-implementation-of-rfc-6902/32007/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-319435" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="319435"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="331147" data-post-id="331147">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="venkatd" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/venkatd/120/9419_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  venkatd
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for your work on this! This is something we may adopt into our project.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331147" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/jsonpatch-pure-elixir-implementation-of-rfc-6902/32007/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-331147" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331147"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="371219" data-post-id="371219">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="corka149" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/corka149/120/16931_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  corka149
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-371219-v230-1" class="anchor" href="#p-371219-v230-1" aria-label="Heading link" rel="nofollow"></a>v2.3.0</h1>
<p>New features, improvements and a bugfix. Thanks to <a class="mention" href="/u/valian" rel="nofollow">@Valian</a>, who did all the work!</p>
<h1><a name="p-371219-changelog-2" class="anchor" href="#p-371219-changelog-2" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<ul>
<li>Feature - Customize diffs for structs (prepare maps or structs before diffing)</li>
<li>Feature - Add an option to set initial path</li>
<li>Bugfix - Incorrect apply_patch for the move operation for the same list</li>
<li>Improvements - Dedicated functions for map and list diffs</li>
</ul>
<p><a href="https://github.com/corka149/jsonpatch/blob/master/README.md" rel="noopener nofollow ugc">Checkout the README for more details</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="371219" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/jsonpatch-pure-elixir-implementation-of-rfc-6902/32007/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-371219" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="371219"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>